gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:15 39 4
gpt4 key购买 nike

所以我有一些代码看起来像这样,用 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”确实被创建了。

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

最佳答案

好吧,我不太确定这是否是处理这个问题的最佳方式,但因为这涉及到一些真正奇怪的行为(在 STL 函数中间崩溃,以及其他一些奇怪的事情,比如卡在 exit 上(1); 之类的),我会在这里留下解释,以备后用。

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

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

关于c++ - ofstream::open 创建文件,但随后崩溃(locale::getloc() 中的错误指针?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526054/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com