【问题标题】:Program crashes on fclose()程序在 fclose() 上崩溃
【发布时间】:2011-04-06 11:12:30
【问题描述】:

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

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

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

cout << fclose(_device)<<endl;  

它也不打印任何东西,只是让我的程序崩溃,没有更多的 cmets。

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

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

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

【问题讨论】:

    标签: c++ crash fclose


    【解决方案1】:

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

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

    【讨论】:

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

      【讨论】:

      • 当然,我正在检查 fopen 返回值,它以 Success 值 (0) 退出此函数。另外,在程序崩溃后查看文件时,我可以看到已对其进行的写入。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多