在 Ubuntu 下排查 C/C++ 内存泄漏,常用方法和工具如下(从简单到专业):
sudo apt update
sudo apt install valgrind
valgrind --leak-check=full --show-leak-kinds=all ./your_program
definitely lost:确定泄漏(重点看)indirectly lost:间接泄漏possibly lost:可能泄漏still reachable:程序退出时未释放但可访问✅ 示例:
int* p = new int[10];
// 忘记 delete[]
Valgrind 会直接指出:
8 bytes in 1 blocks are definitely lost
g++ -fsanitize=address -g -o test test.cpp
./test
✅ 优点:
✅ 示例错误:
==12345==ERROR: AddressSanitizer: leak of 40 byte(s)
export ASAN_OPTIONS=detect_leaks=1
./test
#include <iostream>
#include <map>
void* operator new(size_t size) {
void* p = malloc(size);
std::cout << "Alloc: " << p << std::endl;
return p;
}
void operator delete(void* p) noexcept {
std::cout << "Free: " << p << std::endl;
free(p);
}
⚠️ 仅适合小项目调试
sudo apt install heaptrack
heaptrack ./your_program
heaptrack_gui
new 没有 deletenew[] 用了 delete✅ 开发阶段:
g++ -fsanitize=address -g
✅ 发布前:
valgrind --leak-check=full
如果你愿意,可以把 代码片段 / 编译方式 / 报错信息 发出来,我可以帮你具体定位泄漏点。