什么是内存泄漏?
动态分配内存所开辟的空间,在使用完毕后未手动释放,导致一直占据该内存,即为内存泄漏。
内存泄漏的分类
1.堆内存泄漏
堆内存泄漏指的是程序运行中根据需要通过malloc,realloc,new等从堆中分配的一块内存,完成后没有调用对应的free,delete进行释放,或者是程序错误导致这部分内存没有被释放,这块内存将不会被使用,就产生了堆内存泄漏。
2.系统资源泄漏
主要是指程序使用系统分配的资源,比如Bitmap,handle,socket等没有使用相应的函数释放掉,导致系统资源浪费,严重可导致系统效能降低,系统运行不稳定。
3.未将基类的析构函数定义为虚函数
当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确的释放,因此造成内存泄漏。
如何防止内存泄漏?
malloc,free要配套使用,对指针赋值的时候应该注意被赋值的指针是否需要释放;使用的时候记得指针的长度,防止越界;使用智能指针。