파일에서 읽고 값을 참조로 인수로 전달 된 2 차원 배열에 넣어야하는 read_mat() 함수가 있습니다. malloc()을 사용하여 메모리를 올바르게 할당 한 후에는 두 번째 위치에서 마지막 위치로 배열에 값을 넣는 데 어려움이 있습니다. 그 크기는 N x M이며, 여기서 N은 행이고 M은 열입니다.C에서 malloc 된 2 차원 배열에 액세스
[0] [3]에 액세스하려고 시도한 후 seg-fault가 발생합니다. 첫 번째 행의 마지막 열이어야하지만 메모리에 존재하지 않아야합니다. stdio.h, stdlib.h 및 "header.h"파일 사용하기. 편집
: N = 3, m = 4
int read_mat(int *n, int *m, double ***a) {
//open file
FILE *fp = fopen("matrix.dat", "r");
if (fp == NULL) {
fprintf(stderr, "File open failed!\n");
return -1;
}
//scan first line for size
fscanf(fp, "%d %d", n, m);
//TESTING
printf("Size of n(rows): %d\n", *n);
printf("Size of m(columns); %d\n", *m);
//malloc 1-d array of n # pointers
*a = malloc(*n * sizeof(double*));
//malloc space for m # of columns per row
for (int i = 0; i < *n; i++) {
(*a)[i] = malloc(*m * sizeof(double));
}
//TESTING
fprintf(stderr, "passed malloc!\n");
//scan values and fill array
//rows loop
for (int i = 0; i < *n; i++) {
printf("value of i: %d\n", i);
//column loop
for (int j = 0; j < *m; j++) {
printf("value of j: %d\n", j);
fscanf(fp, "%lf", a[i][j]);
printf("accessed a[%d][%d]!\n", i, j);
}
}
"a [0] [3]"에 액세스하면 'n'과 'm'의 값은 무엇입니까? – MikeCAT
왜'malloc'과'fscanf'가 반환되는지 확인하지 않으시겠습니까? 'malloc'에 대한 호출이 성공적이라는 것을 어떻게 알 수 있습니까? – ameyCU
malloc에서는 문제가되지 않았지만 배열 위치를 호출하는 방법과 함께 fscanf가 배정 된 요소 수에 대한 반환 값을 갖고 있는지 알지 못했습니다. 나는 그것을 미래에 사용해야 할 것이다. –