2015-04-28 3 views
-1

В настоящее время я пытаюсь инициализировать массив 2d со значениями, но сталкиваюсь с ошибкой сегментации ... Я заметил, что это всегда происходило, когда я добавлял строку кода 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()' и family в 'C'. –

+0

действительно ли 'fp'? ты проверил? –

+0

Я не получаю никаких предупреждений в терминале? – user3580218

ответ

1

В коде, вы ни

  • проверил на Sucess из malloc()
  • проверены на успех o f fopen().

Для любого из случаев,

  1. если malloc() терпит неудачу, он возвращает NULL и использовать этот указатель будет вызывать undefined behaviour.

  2. если fopen() не работает, он вернет NULL, а с помощью указателя файла позже будет вызываться undefined behaviour.

Поместите chcek для выполнения всех функций библиотеки (в общем) и используйте возвращаемое значение, только если они успешны.

+0

, очевидно, что fp отображается как null ... хотя у меня есть файл в том же каталоге с именем input.txt – user3580218

+0

В случае массива 2d я попытался инициализировать значение массива 2d Я сделал, и он распечатал значения, чтобы он не был нулевым ... Также я просто понял, что имя файла было проблемой ... Это должно быть «input» not «input.txt» ... I не нужно было добавлять расширение файла ... моя ошибка извините – user3580218

Смежные вопросы