ofstream的::打开创建的文件,但随后崩溃(在语言环境不好的指针:: getloc()?)(o

2019-10-17 00:50发布

所以,我有一些代码,看起来像这样,写在与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呼叫崩溃。

我花了几个小时的调试器看这一点,但我真的不知道发生了什么事情。 任何人有任何想法,甚至试图确定什么是错的代码? 这是完全有可能是一些代码的其他地方是造成这一状况(继承代码),但有很多的它,我甚至不知道去哪里找。 一切都到这一点似乎罚款。

Answer 1:

OK,我真的不知道,如果这是处理这一目标的最佳方式,但由于这涉及到一些真正奇怪的行为(在STL函数中崩溃,和其他一些怪异像挂在exit(1);以及等等),我会在这里留下了解释的未来。

在我们的情况下,错误似乎是从一些内存在的腐败,我们继承了一些真正可怕的代码怎么回事派生。 清理一般的代码消除了这种碰撞和程序显示的其他怪异的行为。

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



文章来源: ofstream::open creates file, but then crashes (bad pointer in locale::getloc()?)