调用vector.push_back时出现DLL入口点_ZSt28__throw_bad_array_new_lengthv找不到错误
解决“无法找到入口点_ZSt28__throw_bad_array_new_lengthv”问题
问题根源
_ZSt28__throw_bad_array_new_lengthv是GNU C标准库中负责抛出std::bad_array_new_length异常的函数。你遇到的入口点缺失问题,核心原因是**编译时使用的MSYS2 GCC版本,与运行时加载的C标准库DLL版本不匹配**——由于之前用过TDM-GCC,系统环境或VS Code配置中可能残留了旧版本库的引用,导致程序运行时找不到对应符号。
复现代码
#include <iostream> #include <vector> using namespace std; int main() { vector <int> vec = {}; vec.push_back(2); return 0; }
解决方案
1. 清理系统环境变量
- 打开系统环境变量设置,找到
PATH变量,移除所有TDM-GCC相关的路径(例如C:\TDM-GCC-64\bin) - 将MSYS2对应架构的GCC路径移到
PATH最前端:- 64位环境:
C:\msys64\mingw64\bin - 32位环境:
C:\msys64\mingw32\bin
- 64位环境:
2. 修正VS Code的C++配置
- 打开项目下的
.vscode/c_cpp_properties.json,确保配置指向MSYS2的GCC示例:
注意替换路径为你实际的MSYS2安装路径和GCC版本{ "configurations": [ { "name": "Win32", "compilerPath": "C:/msys64/mingw64/bin/g++.exe", "includePath": [ "${workspaceFolder}/**", "C:/msys64/mingw64/include/c++/13.2.0", "C:/msys64/mingw64/include" ], "browse": { "path": [ "${workspaceFolder}/**", "C:/msys64/mingw64/include/c++/13.2.0", "C:/msys64/mingw64/include" ] }, "cppStandard": "c++17" } ], "version": 4 }
3. 完全重建项目
- 删除之前编译生成的可执行文件、
.o中间文件 - 打开MSYS2对应架构的终端(
Mingw64或Mingw32),重新编译代码:
运行编译后的程序:g++ -std=c++17 main.cpp -o main.exe./main.exe
4. 验证依赖库
- 在MSYS2终端中执行以下命令,检查程序依赖的标准库:
确认输出中ldd main.exelibstdc++-6.dll的路径指向MSYS2的mingw64/bin或mingw32/bin,而非TDM-GCC的路径。
内容的提问来源于stack exchange,提问作者Penzboti
相关产品推荐
相关产品推荐

