从文件读取矩阵到** a给出了分段错误

时间:2013-01-08 19:01:34

标签: c

我正在尝试将文件中的值读取到此矩阵** 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;

}

2 个答案:

答案 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);