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

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

0 голосов
/ 06 апреля 2011

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

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

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

cout << fclose(_device)<<endl;  

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

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

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

2 голосов
/ 06 апреля 2011

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

_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 причиной вашего сбоя.Я предполагаю, что поток, который вы выводите, не связан с файлом, который вы пытаетесь закрыть;)

...