什么是内存泄漏?

动态分配内存所开辟的空间,在使用完毕后未手动释放,导致一直占据该内存,即为内存泄漏。

内存泄漏的分类

1.堆内存泄漏

堆内存泄漏指的是程序运行中根据需要通过malloc,realloc,new等从堆中分配的一块内存,完成后没有调用对应的free,delete进行释放,或者是程序错误导致这部分内存没有被释放,这块内存将不会被使用,就产生了堆内存泄漏。

2.系统资源泄漏

主要是指程序使用系统分配的资源,比如Bitmap,handle,socket等没有使用相应的函数释放掉,导致系统资源浪费,严重可导致系统效能降低,系统运行不稳定。

3.未将基类的析构函数定义为虚函数

当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确的释放,因此造成内存泄漏。

如何防止内存泄漏?

malloc,free要配套使用,对指针赋值的时候应该注意被赋值的指针是否需要释放;使用的时候记得指针的长度,防止越界;使用智能指针。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注