正如标题所说,我对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版本(或者您可以只卸载一个以外的所有版本)