mfc第二次创建对话框崩溃

mfc第二次创建对话框崩溃,第1张

mfc第二次创建对话框崩溃通常是悉含宽由于内存泄漏或某些资源句柄没有正确释放引起的。如果程序中有指针或其他资源对象,但没有及时释放,就会发生内存泄漏,从而导致第二次创建对话框时出现崩溃。因此,在程序中要及时释老兄放指针或其睁亮他资源句柄,避免内存泄漏,以免出现类似问题。

凡动态分配了存储单元的变量,一旦不用,就要释放。

例如动态数组,不管用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会占用很多资源的,要释放的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12494891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存