程序在fclose()崩溃

时间:2011-04-06 11:12:31

标签: c++ crash 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 个答案:

答案 0 :(得分:2)

之后可能是打开失败
_device = fopen ((char*)filename , "a");  

检查_device!= NULL

编辑由于您在打开后检查_device是否有效,我倾向于使用调试器检查打开时_device的值,并将其与传递给_fclose的值进行比较。出于兴趣,_device指向文件或通信设备,如“COM2:”,因为这也可能对问题产生影响。最后,我将最后的陈述细分如下:

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

原因是您不知道fclose或流输出是否是导致崩溃的原因。我假设您输出的流未链接到您尝试关闭的文件;)

答案 1 :(得分:2)

此外,如果您的程序存在导致随机写入内存的错误,则可能需要使用关闭文件的fclose信息被覆盖。

您可以尝试使用内存检查工具(如valgrind)来检查情况并非如此。