Сбой программы на fclose()

Моя программа падает на этой части кода:

if(fclose(_device) != SUCCESS){  
    cerr << "Output device library error CLOSING FILE\n";  
    exit(1);  
}  

Он ничего не печатает, и когда я пишу вместо этой строки:

cout << fclose(_device)<<endl;  

Он тоже ничего не печатает, а просто вылетает из моей программы без дальнейших комментариев.

В более ранней части моей программы я инициализировал файл этой строкой:

_device = fopen ((char*)filename , "a");  

Что может вызвать такой сбой в моей программе?

2 ответа

Также, если в вашей программе есть ошибки, которые приводят к случайной записи в память, возможно, что информация, которую fclose необходимо использовать для закрытия файла, будет перезаписана.

Вы можете попробовать использовать инструмент проверки памяти, такой как valgrind, чтобы проверить, что это не так.

Может быть сбой при открытии, после

_device = fopen ((char*)filename , "a");  

проверьте это _device!= NULL

Редактировать Поскольку вы проверяете, что _device действителен после открытия, я склонен использовать отладчик для проверки значения _device при открытии и сравнения его со значением, передаваемым _fclose. Из интереса _device указывает на файл или устройство связи, такое как "COM2:", поскольку это также может иметь некоторое отношение к проблеме. Наконец, я бы разбил ваше окончательное утверждение следующим образом;

int CloseResult = fclose(_device);
if (CloseResult != 0)
  cout << errno << CloseResult << endl;

Причиной этого является то, что вы не знаете, является ли выход fclose или stream причиной вашего сбоя. Я предполагаю, что поток, который вы выводите, не связан с файлом, который вы пытаетесь закрыть;)

Другие вопросы по тегам