在 Ubuntu 上用 C++ 程序运行崩溃(crash)是很常见的问题,原因非常多。下面我按最常见原因 → 排查方法 → 解决思路给你系统讲一下,你可以对照自己的情况。
这是 Ubuntu 下 C++ 崩溃的头号原因
典型原因:
std::string / vector 越界示例:
int* p = nullptr;
*p = 10; // 崩溃
✅ 排查:
gdb ./your_program
run
bt # 查看崩溃位置
int x;
std::cout << x; // 未定义行为
✅ 建议:
int x = 0;
int* p = new int(10);
delete p;
delete p; // 崩溃
✅ 解决:
std::unique_ptr / std::shared_ptrvalgrind 检查valgrind ./your_program
Ubuntu 常见坑:
libstdc++ 版本不一致现象:
core dumpedGLIBCXX_3.4.xx not found✅ 检查:
ldd ./your_program
✅ 解决:
-static-libstdc++示例:
std::thread t([]{
std::cout << "bug\n";
});
// 没 join / detach
✅ 确保:
t.join();
void f() { f(); }
或:
char buf[10 * 1024 * 1024]; // 太大
✅ 解决:
ulimit -s unlimited
g++ -g main.cpp -o main
gdb ./main
(gdb) run
(gdb) bt
ulimit -c unlimited
./your_program
生成 core 文件后:
gdb ./your_program core
g++ -Wall -Wextra -O0 -g main.cpp
你可以直接贴:
Segmentation fault (core dumped))我可以直接告诉你是哪一行炸了、为什么炸、怎么改。
你现在是哪种情况?