0
행렬 (src)과 2 개의 정수 값 (x, y)을 취하고 src x를 y 번 포함하는 행렬을 제공하는 C 함수를 작성해야한다. 예 행렬 복사로 세분화 오류가 발생한다.
(2,3) I의 구조를struct Mat {
int cols; // number of columns
int rows; // number of rows
int** row_ptrs; // pointer to rows (the actual matrix)
} Mat;
를 부여하고,이 함수 작성하고
3 5 3 5
2 1 2 1
3 5 3 5
2 1 2 1
3 5 3 5
2 1 2 1
될 예정으로
3 5
2 1
:
#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;
}
을
그러면 나는 어떤 사람들을 받았다. 테스트 프로그램 : 그들 중 절반은 잘 작동하고, 다른 것은 나에게 segfault를줍니다. 테스트가 정확하다는 것을 알고 있으므로 내 프로그램에 문제가 있어야합니다. 찾는데 도와 줄 수 있니?
"당신이 나를 찾을 도와 드릴까요?"이
주의해야합니다. 예 - 디버거를 사용하도록 조언합니다. 그러한 문제를 디버깅하는 가장 좋은 방법입니다. – kaylum
이것은 두 번째 코스이며 지금까지는 디버거를 사용하지 않았습니다. 나는 valgrind를 시도했지만 매우 도움이되지 못했습니다. – user2704673
디버거는 대개 그들이 가르치는 것이 아닙니다. 그것은 당신이 스스로를 배우는 도구입니다. 그리고 당신의 인생이 더 쉬워 질수록 더 빨리 배울 것입니다. –