仅当启用优化时,在函数中声明ifstream而不是main时出现段错误

正如标题所说,我对ifstream有意见。我试图读取一个文本文件,在调试时可以正常工作,但在发布版本中不行。我能够把它缩小到下面的例子

如果启用了优化,则以下代码段在到达foo()中的file声明时出错

#包括<iostream>
#包括<fstream>
void foo(){
std::cout“我在这里3”std::endl;
std::ifstream文件;
std::cout“我在这里4”std::endl;
}
int main()
{
std::cout“我在这里1”std::endl;
std::ifstream文件;
std::cout“我在这里2”std::endl;
foo();
返回0;
}

输出:

我在这里1
我在这里
我在这里

我正在使用以下命令编译和链接:

g++-Wall-std=c++17-O1 main.cpp-o main.exe

如果我将-O1更改为O0,它不会出现故障并一直运行到最后。我真的不确定问题出在哪里

我的系统是Windows 10,运行的是g++.exe(x86_64-win32-seh-rev0,由MinGW-W64项目构建)8.1.0。这是一个编译器错误还是我只是在做一些愚蠢的事情

由于--static修复了它,这意味着您的程序拾取了不正确的DLL版本

打开编译器的bin目录,列出其中的所有DLL

然后:

  • C:\Windows(递归)中搜索这些DLL。删除任何匹配的DLL,它们不应该存在

  • 确保编译器是路径中的第一件事,或者至少确保它之前的任何目录不包含那些DLL(或者更好,除了编译器之外的所有目录)

    这包括在路径中没有两个不同的MinGW版本(或者您可以只卸载一个以外的所有版本)

发表评论