MinGW环境下C++定义vector导致程序无输出异常问题求助
解决方案
以下是针对MinGW环境该问题的可落地解决步骤,按优先级尝试即可:
优先尝试静态编译规避动态库冲突
90%以上的同类问题都是运行时加载了不匹配的libstdc++动态库导致,编译时添加静态链接参数即可解决:g++ 你的代码文件名.cpp -o 输出程序名.exe -static-libgcc -static-libstdc++该参数会把依赖的GCC、C++标准库直接打包进exe,无需依赖外部dll,可直接排除动态库加载错误的问题。
排查环境变量的动态库优先级冲突
如果你不想用静态编译,可打开CMD执行以下命令:where libstdc++-6.dll如果返回的第一个路径不是你当前使用的MinGW的
bin目录,说明系统PATH里其他软件自带的同文件名动态库优先级更高,程序运行时加载了错误的库。解决方法是把你的MinGW的bin目录移动到系统PATH的最顶部,或者每次运行程序前将MinGWbin目录下的libstdc++-6.dll、libgcc_s_seh-1.dll(32位为libgcc_s_dw2-1.dll)拷贝到exe同级目录。升级老旧的MinGW版本
你使用的g++ 6.3是2016年发布的旧版本,和Win10后续的系统更新存在兼容性问题,建议直接替换为最新的MinGW-w64发行版,对Win10/Win11的兼容性远高于老旧的原版MinGW。(极端场景排查) 确认输出缓冲刷新逻辑
极少数场景下存在控制台缓冲未正常刷新的问题,可在输出语句后强制刷缓冲验证:std::cout << "Test" << std::endl << std::flush;
你遇到的循环位置影响输出的现象和上述原因完全吻合:vector初始化会触发C++标准库的容器相关逻辑,加载错误动态库时会直接在该步骤崩溃,崩溃发生在cout内容刷到控制台之前就会无输出;循环放在vector前面时,崩溃触发前cout的内容已经完成输出,因此能看到正常打印。
内容的提问来源于stack exchange,提问作者ItzBenteThePig

