我正在尝试将文件中的值读取到此矩阵** a,但由于Segmentation fault
,我总是得到scanf
。
你能解释一下我的错误吗?谢谢
int main(int argc, char**argv) {
int**a;
FILE * fp;
int i, j, temp;
int n = 8;
fp = fopen("matrix.txt", "r");
a = malloc(sizeof(int)*n);
for (i = 0; i < n; i++)
a[i] = malloc(sizeof(int)*n);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
fscanf(fp, "%d", a[i][j]);
return 0;
}
答案 0 :(得分:5)
您需要fscanf
中的&符号:
fscanf(fp, "%d", &a[i][j]);
^
第二个可能会让您感到困惑的问题是您在第一个sizeof
中使用了错误的malloc
。您想要sizeof(int *)
而不是sizeof(int)
。避免此类问题的一个简单规则就是使用:
a = malloc(n * sizeof *a);
答案 1 :(得分:3)
第一个错误在于:a = malloc(sizeof(int)*n);
。
您必须使用int*
类型:
a = malloc(sizeof(int*)*n);