提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
背景
提示:这里可以添加本文要记录的大概内容:
C/C++编程语言中,内存的分配与回收都是由开发人员主动进行的,比如使用malloc/new申请内存,free/delete进行释放内存。 这样做的好处是内存管理的开销较小,程序员拥有更高的执行效率。 坏处是随着代码的扩大和开发者水平的限制,或者一些不规范的编程习惯可能会使程序具有安全隐患,导致内存泄漏、系统崩溃等后果产生,下面就让我们一起看看常见的内存泄漏的情况吧
提示:以下是本篇文章正文内容,下面案例可供参考
一、malloc后未释放
代码示例:
int fun() {
char * pBuffer = malloc(sizeof(char));
return 0;
}
上面代码是我们常见的一种情况,我们申请了一块内存但是在函数结束时并没有进行释放。 这时需要在return 0执行free()。 在C/C++中还有一种内存泄漏 代码示例:
class Obj {
public:
Obj(int size) {
buffer_ = new char;
}
~Obj(){}
private:
char *buffer_;
};
int fun() {
Object obj;
return 0;
}
上面这段代码中,析构函数没有释放成员变量buffer_指向的内存,所以在编写析构函数的时候,一定要仔细分析成员变量有没有申请动态内存,如果有,则需要手动释放,我们重新编写了析构函数,如下:
~Object() {
delete buffer_;
}
二、未匹配
使用malloc进行内存分配后,要使用free进行释放, 使用new申请内存之后,要使用delete进行删除。
|