在 Linux 下用 C/C++ 查内存泄漏,常用方法和工具如下,按“从简单到专业”给你一个清单:
sudo apt install valgrind # Ubuntu/Debian
valgrind --tool=memcheck --leak-check=full ./your_program
definitely lost:确定泄漏(必须修)indirectly lost:间接泄漏possibly lost:可能泄漏still reachable:程序退出时还没释放(不一定算 bug)✅ 优点:不用改代码,最权威
❌ 缺点:程序变慢(10~50倍)
g++ -fsanitize=address -g -O1 main.cpp -o main
./main
泄漏会直接打印调用栈,定位非常快。
✅ 优点:
❌ 缺点:
自己封装 new/delete 或 malloc/free
void* operator new(size_t size) {
void* p = malloc(size);
log_alloc(p, size);
return p;
}
void operator delete(void* p) {
log_free(p);
free(p);
}
适合:
std::shared_ptr<T>
std::unique_ptr<T>
✅ 从根本上减少泄漏
mtrace(glibc 自带)heaptrack(图形化分析)gperftools(tcmalloc)new 没 deletestd::string / vector 代替裸指针如果你愿意,可以把:
发给我,我可以给你最合适的排查方案。