程序中的内存泄漏主要有:
1. 用new,malloc,GolbalAlloc等函数分配的堆内存没有用delete,free,GlobalFree等释放,这些内存在Debug时候都可以Dump出信息的,但只有new在Debug的时候会正确指出出错的行,因为在Debug版本中VC对new进行了重定义,建议大家分配内存时尽量使用new
2. 在绘图时创建的GDI对象没有释放,但如果你是使用MFC的GDI对象类,出错的几率会小得多。用new创建的对象会被检测到,而如果使用局部变量,在局部变量失效后会自动释放,不会造成内存泄漏。
3. 创建的线程,窗口等句柄资源,在失效后没有释放掉,这个很麻烦。因为VC无法检测到未释放的句柄资源。
在可能导致内存泄漏的地方用CMemState检测,或者以调试方式运行,结束程序的时候会Dump出一大堆内存泄漏信息的。
内存泄漏是指程序运行时,对不再使用的(分配过的)内存空间没有进行处理,也就是没有进行释放。由于系统对内存的分配是动态的,内存是“漂移的",这样当其他程序访问到本段内存时,就容易产生问题,甚至有严重的后果。因为是把本程序的内容“泄漏”给其它程序,所以叫内存泄漏。