Ошибка сегментации Ошибка основного дампа

Это моя программа на C, и я использую компилятор g++. После компиляции, когда я запускаю код, он выдает ошибку сегментации (сброс ядра):

#include <stdio.h>
#include <stdlib.h>

int main(){

  FILE *fp;

  fopen("sample.txt", "w+");

  fprintf(fp, "%s %s %s %d", "We", "are", "in", 2016 );

  fclose(fp);

  return 0;
}

Пожалуйста, направляйте.


person ramnarayanan    schedule 16.04.2016    source источник
comment
Вы используете fp без его инициализации. Это причина неопределенного поведения. Используйте fp = fopen("sample.txt", "w+");.   -  person R Sahu    schedule 16.04.2016
comment
Пожалуйста, удалите свой пост. Вряд ли кому-то еще это будет полезно.   -  person R Sahu    schedule 16.04.2016


Ответы (2)


Только что узнал: просто назначьте функцию открытия файла моему файловому дескриптору.

fp = fopen("sample.txt", "w+");
person ramnarayanan    schedule 16.04.2016

fprintf печатает в файл, заданный файловым указателем fp. В этом случае fp только объявляется и ему никогда не присваивается значение, поэтому оно равно null. Когда fprintf использует нулевой указатель, это вызывает ошибку seg. Вы должны были сделать fp = fopen(...), чтобы указатель не был нулевым.

person Philip    schedule 16.04.2016
comment
следовательно, это null - это неопределенно - person WhozCraig; 16.04.2016
comment
Вы совершенно правы. Я почему-то думал, что fp глобальный - person Philip; 16.04.2016