ファイルから読み込んで値を2-d配列に格納する関数read_mat()があります。この配列は引数として参照渡しされます。 malloc()を使ってメモリを正しく割り当てた後、2番目から最後の位置に配列に値を入れるのに問題があります。そのサイズはN×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が割り当てられた要素数の戻り値を持っているかどうかわかりませんでした。私はそれを将来使用する必要があります。 –