C++ assert()在没有给出任何错误消息或失败的行的情况下失败

Lef*_*ris 2 c c++ assert

我的代码中有一个奇怪的问题.我有许多分散在代码周围的断言,一切都运行良好.每当断言失败时,我都会收到一条消息,告诉我故障发生的位置.今天我在一个加载文件的函数中写了另一个断言.只是想确保fie存在.一个非常简单的断言.这是相关代码:

//Check that the file exists and can be opened
FILE* f = fopen(filename, "rb");

#ifdef ASSERTIONS_ON
    assert(f!=NULL);//@problem For some reason while all other asserts work, this one just crashes the program without reporting line
#else
    if(f  == NULL)
        return MODEL_LOAD_FILENOTFOUND;
#endif

fclose(f);
Run Code Online (Sandbox Code Playgroud)

我知道这并没有多大帮助,只是想展示我的问题所在.我的操作系统是Windows 7.编译器是GCC.我从Windows获得的错误消息是通常的运行时错误但没有行报告:

"该应用程序已要求Runtime以不寻常的方式终止它.请联系应用程序的支持团队以获取更多信息"

可能是什么问题呢?什么可能导致断言失败只是请求终止而不报告它发生的行,而在相同的代码中的每个其他情况下它按预期工作?在此先感谢您的帮助!

ine*_*ght 6

在断言执行之前,你很可能在某处有FUBAR的堆栈.