C++中内存泄漏的检测与修复方法
在C++开发中,内存泄漏是长期困扰开发者的核心问题。当动态分配的内存未被正确释放时,程序会持续占用系统资源,最终导致内存耗尽甚至崩溃。本文基于CSDN社区技术文章,结合实际案例与代码演示,总结系统化解决方案。
一、典型内存泄漏场景与案例
1. 显式分配后未释放
void leaky_func() {
int* ptr = new int(42); // 分配内存
// ... 使用ptr ...
// 忘记 delete ptr; // 内存泄漏
}
2. 类成员指针未释放
class BadClass {
int* data;
public:
BadClass() : data(new int[100]) {
}
~BadClass() {
/* 未 delete[] data */ } // 析构函数缺失释放逻辑
};
3. 容器存储原始指针未释放
std::vector<int*> vec;
vec.push_back(new int(10));
vec.clear(); // 仅移除指针,未释放内存
4. 异常导致的内存泄漏
void risky_func() {
int* ptr = new int(42);
some_operation_that_may_throw(); // 可能抛出异常
delete ptr; // 可能无法执行
}
5. 循环引用导致的泄漏
class Node {
public:
std::shared_ptr<Node> next;
~Node() {
std::cout << "Node destroyed\n"; }
};
void create_cycle() {
auto a