2015-04-28 63 views
-1

我目前正在尝试初始化一个二维数组的值,但不断遇到分段错误......我注意到它总是在我添加fscanf代码行时......但我不明白什么地方错了,因为从我的理解,它应该工作......这是一个代码片段:阅读与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]); 
      } 
     } 
+2

标准警告:请[不要转换](http://stackoverflow.com/q/605845/2173917)''malloc()'和家族在'C'中的返回值。 –

+0

在这里是'fp'有效吗?你检查了吗? –

+0

我在终端没有收到任何警告? – user3580218

回答

1

在代码中,你既不

  • 检查的malloc()
  • 的研制成功检查成功o f fopen()

对于任何的情况下,

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

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

把chcek放到所有库函数中(一般情况下),只有在成功时才使用返回值。

+0

显然fp显示为空...尽管我在名为input.txt的同一目录下有一个文件 – user3580218

+0

对于2d数组,我尝试初始化2d数组的值我做了,它打印出来的值,所以它不是空的...我也只是想出了文件的名称是问题...它应该是“输入”而不是“input.txt”...我不需要添加文件扩展名...我的错误感到抱歉 – user3580218