例如动态数组,不管用new,还是 malloc分配的。就要 delete 或 free. 这点,你会注意的。
但MFC程序有些地方 动态分配存储单元 对程序员来说,不能“明显看出”。 由于MFC程序是事件驱动程序,有许多子程序(函数)是不断循环执行的。这些 不能“明显看出”的 动态分配,正因为不会自动释放, 才会引起泄漏。
例如 CView OnDraw()里,如果你 建了一个 font, "画" 完字,不用了,就要释放州旦。
CFont font
font.CreateFontIndirect(&lf)// 这个过程隐含了分配
....
DeleteObject(font) // 不用了前铅,就要释放
例如, 调色盘
LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]
....
delete[] pLP// 不用了,就要释放
例如, 句柄
HANDLE hDIB = DDBToDIB( bitmap, BI_RGB, &pal )// 这个过程隐含了分配
....
GlobalFree( hDIB )// 不用了,就要释放
MFC程序比较复杂,你的泄漏是怎样引起的,要自己查找。上次有位提问的朋友,慧迹好就是 CFont font泄漏,没找到毛病所在,觉得复杂,找到了,觉得如此简单。
最好不要用指针去这样做,直接这样CFileDialog fDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL)这样就一定不会出问题,
而你高尘型用的兄纤是指针的方法,CFileDialog* fDlg=new CFileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL)
指针的不安全,一般不适用在MFC,
如果一戚猜定要的,看看谁否delete fDlg
了吗。因为CFileDlog会占用很多资源的,要释放的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)