1

所以我有一些看起来像这样的代码,用 Visual Studio 2010 编写和编译:

if ( outputFile.is_open() )
{
    outputFile.close();
}
if ( !outputFile.is_open() ) // condition for sanity-checking
{
    outputFile.open("errorOut.txt", ios::out);
}

这会在访问冲突时崩溃。附加调试器显示第一个条件为假(outputFile未打开),第二个条件为真(outputFile已关闭,这很好,因为我刚刚检查过)。然后open()被调用,并最终locale::getloc()尝试取消引用空指针,但我不知道为什么会发生这种情况(因为现在标准库中有三个类)。

有趣的是,文件“errorOut.txt”确实被创建了,即使open调用崩溃了。

我已经在调试器中看了几个小时,但老实说,我不知道发生了什么。任何人都有任何想法甚至试图确定代码有什么问题?完全有可能其他地方的某些代码导致了这种情况(继承代码),但是有很多,我什至不知道去哪里找。到目前为止,一切似乎都很好。

4

1 回答 1

1

好的,我不确定这是否是处理此问题的最佳方法,但由于这涉及一些真正奇怪的行为(在 STL 函数中间崩溃,以及其他一些奇怪的事情,如挂断exit(1);等),我'以后会在这里留下一个解释。

在我们的例子中,错误似乎源于我们继承的一些真正糟糕的代码中发生的一些内存损坏。清理代码通常可以消除程序显示的这种崩溃和其他奇怪行为。

我不知道这是否对任何人有用;也许简单地删除问题会更好。如果有人想发表评论,我实际上有点好奇我是否应该这样做。

于 2012-07-24T21:57:56.063 回答