ofstream :: open创建文件,但随后崩溃(locale :: getloc()中的错误指针?)

时间:2012-07-17 15:41:32

标签: c++ file crash ofstream

所以我有一些看起来像这样的代码,用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()尝试取消引用空指针,但我不知道为什么会发生这种情况(因为现在标准库中有三个类)。

有趣的是,即使open调用崩溃,也会创建“errorOut.txt”文件

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

1 个答案:

答案 0 :(得分:1)

好吧,我不确定这是否是解决此问题的最佳方式,但由于这涉及一些非常奇怪的行为(在STL函数中间崩溃,以及其他一些奇怪的事情,比如挂在{{1}上等等,我将在这里留下一个解释。

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

我不知道这对任何人都有用;也许最好简单地删除这个问题。如果有人想留下评论,我实际上有点好奇。