内存泄漏怎么产生的?如何避免?

  • 内存泄漏一般是指堆内存的泄漏,也就是程序在运行过程中动态申请的内存空间不再使用后没有及时释放,导致那块内存不能被再次使用。
  • 更广义的内存泄漏还包括未对系统资源的及时释放,比如句柄、socket等没有使用相应的函数释放掉,导致系统资源的浪费。

VS下检测内存泄漏方法:


#define CRTDBG_MAP_ALLOC 
 #include <stdlib.h> 
#include <crtdbg.h> 
//在入口函数中包含 
_CrtDumpMemoryLeaks();
 //即可检测到内存泄露 
//以如下测试函数为例:  
int main()
{
 char* pChars = new char[10]; 
//delete[]pChars; 
 _CrtDumpMemoryLeaks(); 
system("pause"); return 0;
}

解决方法:

  • 养成良好的编码习惯和规范,记得及时释放掉内存或系统资源。
  • 重载new和delete,以链表的形式自动管理分配的内存。
  • 使用智能指针,share_ptr、auto_ptr、weak_ptr。
标签: 泄漏、ptr、系统资源、crtdbg、crtdumpmemoryleaks、面试
  • 回复
隐藏