什么是内存泄露?
程序未能释放已经不再使用的内存的情况,为应用程序分配内存之后,因设计错误,失去了对该内存的控制,造成了内存的浪费,一般来说就是申请了一块内存,使用完毕之后忘记释放
内存泄露的危害
出现内存泄露会导致响应越来越慢,最终死机
void MemoryLeaks()
{
// 1.内存申请了忘记释放
int* p1 = (int*)malloc(sizeof(int));
int* p2 = new int;
// 2.异常安全问题
int* p3 = new int[10];
Func(); // 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.
delete[] p3;
}
内存泄露分类:
1.堆内存泄露:堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存,用完后必须通过调用相应的 free或者delete 删掉。假设程序的设计错误导致这部分内存没有被释放,那么以后这部分空间将无法再被使用,就会产生Heap Leak。
2.系统资源泄露:指程序使用系统分配的资源,比方套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。
如何解决内存泄露(常用方法):
1.申请的内存空间要及时释放
2.采用RAII思想或者智能指针管理资源