今天发现程序内存泄漏,就在CxxxAPP::ExitInstance()里放了_CrtDumpMemoryLeaks语句.问题1:
在单位里调试时还可以进去exitInstance函数
我把代码带回家后再运行和调试,发现关闭程序时怎样都进不去ExitInstance()了
放个AfxMessageBox都不响应问题2:
我打开程序时,占用内存0%,
关闭窗口后,调出任务管理器发现进程没关掉,而且内存占用率激增至50%
进程没关掉应该是因为内存泄漏,但内存占用率怎么会增加那么多呢?请大家为我释疑
在单位里调试时还可以进去exitInstance函数
我把代码带回家后再运行和调试,发现关闭程序时怎样都进不去ExitInstance()了
放个AfxMessageBox都不响应问题2:
我打开程序时,占用内存0%,
关闭窗口后,调出任务管理器发现进程没关掉,而且内存占用率激增至50%
进程没关掉应该是因为内存泄漏,但内存占用率怎么会增加那么多呢?请大家为我释疑
malloc 和 free是否成对
什么都没做?delete也没有?
我知道怎样排查是那里出现了内存泄漏.可是如题产生的两个问题无法理解,
希望谁能帮我解释下是怎么回事?
我关闭程序按钮的代码是自写的.
是:
p->SendMessage(WM_SYSCOMMAND,SC_CLOSE,0);//p为MainFrame指针
检查 ExitInstance 和 AfxMessageBox 之前的代码 看看哪里有 阻塞 特别是有没有循环在new
请问你循环New的东西有必要么?
如果没有必要的话可以改为别的代码
New完之后必须Delete还有New的指针也要Delete哦
包括窗体指针等等。
要不内存肯定会泄漏的
把 p->SendMessage(WM_SYSCOMMAND,SC_CLOSE,0);//p为MainFrame指针
改为AfxGetApp()->PostThreadMessage(WM_QUIT,..);请问这个有什么区别吗?为什么用前者会发生错误
p->SendMessage(WM_SYSCOMMAND,SC_CLOSE,0);这句话又是要让p即MainFrame 处理消息
这不就阻塞了吗