在没有进行任何代码更改的情况下突然出现错误“调试断言失败错误”。 (在 C++ 代码中)

Posted

技术标签:

【中文标题】在没有进行任何代码更改的情况下突然出现错误“调试断言失败错误”。 (在 C++ 代码中)【英文标题】:Getting the error "Debug assertion failed error" all of a sudden without any code change been done. (In C++ code) 【发布时间】:2012-04-20 08:50:59 【问题描述】:

我的 VC++ 代码可以正常工作(正在执行),现在我突然不明白为什么会出现“调试断言失败”错误。

file:f\dd\vctools\crt_bld\self_x86\crt\src\fclose.c.

我在 WIn7 64 位操作系统上使用 VS2008。

运行良好的代码突然以这种方式中断而没有任何代码更改的原因可能是什么?

谁能帮我摆脱这个错误?

我在调用堆栈中看到之前的代码在文件中

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\crt\src\crt0dat.c
while ( pfbegin < pfend )              
                    
        /*             
         * if current table entry is non-NULL, call thru it.               
         */                      
        if ( *pfbegin != NULL )                  
            (**pfbegin)();              
        ++pfbegin;                       
                              

是的,fclose() 正在接收一个空文件指针。我真的不明白为什么会突然出现错误的文件指针值,而我却没有对代码或环境进行任何更改。

【问题讨论】:

能否贴出相关代码sn-p(断言失败前的代码行)? 猜测:对应fopen()打开的文件失败,导致将空指针传递给fclose() 是的,我已经在我的问题中编辑了必要的代码。 :) pfbeginpfend 是什么类型?声明? 是的,一些错误需要很长时间才能显示出任何效果是很常见的。测试永远无法涵盖所有​​可能的输入组合和情况。 【参考方案1】:

能否提供调用fclose() 的代码? 我可能猜到 fopen() 未能打开返回 NULL 的文件,例如因为文件不存在。您没有检查此错误并将 NULL 句柄传递给 fclose()

【讨论】:

我在调用堆栈中观察到调用者没有正确提及。它又是一些标准的 Microsoft 给定文件,而不是我的代码。我观察到的一件奇怪的事情是,即使我按 F10 进行逐行调试。它直接引发了这个“调试断言失败错误”。所以无法正确做出任何事情。非常奇怪的行为! 如果你一直往下看调用堆栈,你必须在某个时候到达你自己的代码,或者你已经完全破坏了堆栈。 如果我在调用堆栈中继续往下走,我只会找到一些没有代码的 Dll 再次 microsoft dll。能否请您告诉我您所说的“完全破坏堆栈??我的 VS 设置是否损坏?如果我重新安装我的 VS2008,它会工作吗? 可能是您在读取文件时出现缓冲区溢出?请注意fread 调用,确保为buffer 分配的内存大小足以容纳您读取的数据,即不小于size*count

以上是关于在没有进行任何代码更改的情况下突然出现错误“调试断言失败错误”。 (在 C++ 代码中)的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Functions 在没有错误消息的情况下崩溃

Paypal Sandbox 突然停止发送 IPN

什么情况下IIS服务需要重启

如何在不进行任何更改的情况下恢复推送的合并?

django 表单错误。得到没有任何 html 标签的错误

如果AWS RDS恢复发生,如何重新连接