0

我的程序在这部分代码上崩溃:

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

它不打印任何东西,当我写这一行时:

cout << fclose(_device)<<endl;  

它也不打印任何东西,只是让我的程序崩溃,没有进一步的评论。

在我的程序的早期部分,我用这一行初始化文件:

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

什么会导致我的程序崩溃?

4

2 回答 2

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 或流输出是否是导致崩溃的原因。我假设您输出到的流未链接到您尝试关闭的文件;)

于 2011-04-06T11:17:13.487 回答
2

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

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

于 2011-04-06T11:26:02.263 回答