[英]Accessing malloc'd 2-D array in C
我有一个read_mat()函数,需要从文件中读取并将值放入二维数组中,该数组通过引用作为参数传递。 使用malloc()为其正确分配内存后,我在倒数第二个位置将值放入数组时遇到了麻烦。 其大小为N x M,其中N为行,M为列。
我尝试访问a [0] [3]后出现段错误,我认为这应该是第一行的最后一列,但显然它在内存中不存在? 使用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);
}
}
线
fscanf(fp, "%lf", a[i][j]);
是错的。 这个访问i
个的元件a
和可能是无效的,当i>0
。 你想要的应该是
fscanf(fp, "%lf", &(*a)[i][j]);
添加一些代码来检查fscanf()
是否成功将使您的代码更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.