为什么用PostMessage(WM_QUIT),或PostQuitMessage(0)退出时提示有内存泄漏

cindyxia 2003-10-18 12:02:44
基于CFormView的单文档,单击按钮退出。响应函数内的代码为PostMessage(WM_QUIT),或PostQuitMessage(0)是能够退出,但却显示有内存泄漏,为什么?
该如何退出
...全文
227 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lygfqy 2003-10-21
  • 打赏
  • 举报
回复
程序结束前注意释放自己分配的内存和对象
scatzr 2003-10-21
  • 打赏
  • 举报
回复
线程当在程序结束前exitthread
指针要delete
leon_z 2003-10-20
  • 打赏
  • 举报
回复
to cindyxia (夏晓雪)

你的短信我看到了,以下是回复:

本来人无完人,技术的交流久无止尽,不用客气
多线程编程的话,与是否基于CFormView无关,你可以使用多种方案来解决这个问题:
1、你可以使用工作线程并用参数传入你想得到的句柄的父类窗口指针,再在你的线程函数中强制转回来就可以用了,例:

AfxBeginThread(ThreadFunc,this); //在CParent中的某个成员中激发线程

UINT ThreadFunc(LPVOID lParam)
{
CParent * pThis = (CParent *)lParam;
pThis-> ... //可以直接操作CParent 中的Public成员
....
return 0;
}

2、用一个全局变量(CParent的指针 g_pParent)然后在线程中调用即可,但是要注意,用全局变量前必须初始化这个g_pParent,一般我在CParent的构造中将CParent的this的地址作为g_pParent的值(个人认为此为不得已而为之)。

3、如果你有可能在线程运行中由外部强行结束线程,就要注意线程所占用的RES和MEM的释放,不过最好不要那样做,我好象也遇到过此类问题,要跟据你在线程中具体做的事情来分析,如果一旦采用多线程来处理就一定要清楚它什么时候开始,要干些什么,什么时候可以安全的结束,有没有必要,访问的成员或内存区是否有可能出现冲突(与其它线程),如果有那又是怎样的冲突。如果你在这方面想得到更加系统和细制的指导,我推荐一本书给你《WINDOWS2000编程技术内幕》它对多线程的问题说得很清楚

我的功力有限,以上拙见,希望能对你有所帮助
leon_z 2003-10-18
  • 打赏
  • 举报
回复
是不是用BoundCheck检查的,如果是的话你在LEEK的代码上找就可以了,如果是MFC自已的源代码,你可以在它附近找到释放的语句,设个断点在那里,F5跟一下,你就知道是怎么回事了


BoundCheck在最后的AfxFreeLibery之前就会结束,一般会报一个Res Leek,不过这个是没有关系的,至于PostQuitMessage(0)会提前使进程结束,在这种情况在不保证所有的资源都会释放,最好不要在程序运行中随调用这两条语句,一般只是初始化失败的情况下用.
feeboby 2003-10-18
  • 打赏
  • 举报
回复
看看new过的东西有没有delete掉

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧