Ich muss eine Funktion in C schreiben, die eine Matrix (src) und 2 ganzzahlige Werte (x, y) aufnimmt und dann eine Matrix ausgibt, die src x mal y enthält. Zum BeispielMatrixkopieren verursacht Segmentierungsfehler
3 5
2 1
mit (2,3) wird
3 5 3 5
2 1 2 1
3 5 3 5
2 1 2 1
3 5 3 5
2 1 2 1
ich die Struktur gegeben bin sein
struct Mat {
int cols; // number of columns
int rows; // number of rows
int** row_ptrs; // pointer to rows (the actual matrix)
} Mat;
und schrieb diese Funktion:
#include "exercise_1.h"
#include <stdlib.h>
Mat* matrixRepeat(Mat* src, int num_row_blocks, int num_col_blocks)
{
Mat *newMat = malloc(sizeof(Mat));
newMat->rows = src->rows * num_row_blocks;
newMat->cols = src->cols * num_col_blocks;
newMat->row_ptrs = calloc(newMat->rows, sizeof(int*));
for(int i = 0; i < newMat->cols; i++)
newMat->row_ptrs[i] = calloc(newMat->cols, sizeof(int));
for(int i = 0; i < newMat->rows; i++)
for(int j = 0; j< newMat->cols; j++)
newMat->row_ptrs[i][j] = src->row_ptrs[i%src->rows][j%src->cols];
return newMat;
}
Dann habe ich einige gegeben Testprogramme: Die eine Hälfte funktioniert gut, die andere hart. Ich weiß sicher, dass die Tests korrekt sind, daher muss ein Problem in meinem Programm bestehen. Kannst du mir helfen, es zu finden?
"Können Sie mir helfen, es zu finden?". Ja - indem Sie darauf hingewiesen werden, einen Debugger zu verwenden. Das ist der beste Weg, um solche Probleme zu beheben. – kaylum
Dies ist unser zweiter Kurs, und wir haben bisher keine Debugger verwendet. Ich versuchte Valgrind, aber es war nicht sehr hilfreich – user2704673
Debugger ist in der Regel nicht etwas, was sie lehren. Es ist ein Werkzeug, das Sie lernen, sich selbst zu benutzen. Und je früher du es lernst, desto leichter wird dein Leben in der Zukunft sein –