用fscanf分段读取错误

时间:2015-04-28 08:14:21

标签: c segmentation-fault

我目前正在尝试使用值初始化2d数组,但仍然遇到分段错误...我注意到它总是在我添加fscanf代码行时发生...但我不明白它有什么问题从我的理解它应该工作...这是一个代码片段:

    FILE * fp;
        int count, i,j;
        int **arr;

        arr = (int**)malloc(sizeof(int*)*9);
        for(i = 0; i < 9; i++){
            arr[i] = (int*)malloc(sizeof(int)*9);
        }    

fp = fopen("input.txt", "r");

    for(i = 0; i < 9; i++){
            for(j = 0; j < 9; j++){
                fscanf(fp, "%d", &arr[i][j]);
            }
        }

1 个答案:

答案 0 :(得分:1)

在您的代码中,您既不是

  • 检查了malloc()
  • 的成功
  • 检查fopen()
  • 是否成功

对于任何一种情况,

  1. 如果malloc()失败,它将返回NULL并使用该指针将导致undefined behaviour

  2. 如果fopen()失败,它将返回NULL,稍后使用文件指针将再次导致undefined behaviour

  3. 使用chcek来获取所有库函数(通常)并仅在成功时使用返回值。