导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

退出程序与内存泄漏

keyou 2001-04-19 06:15:00
我的程序结构如下:
CWinApp
CMainFrame
CChildView CFrameWnd(5个类) CDialog CSocket(2个类)

我在CDialog里调用主框架的成员函数来退出程序,即调用
CMainFrame::ExitApp()
{
PostQuitMessage(0);
delete AfxGetApp()->GetMainWnd();
}
来退出程序;但是程序要很久才能退出来.还有就是,有时虽然我执行了ExitApp();但不能彻底退出程序,出现程序驻留在机器里,用VC的Process Viewer来观察发现,我的程序依然还在!!!更糟糕的事:在Process Viewer也不能杀死这个程序!!!!?????后来我想肯定是后面那一条语句delete AfxGetApp()->GetMainWnd();作怪,但不加上的话则不执行各个类的析构函数!!!!??????出现内存泄漏.高手帮帮忙了!!!!! :)

还有一个问题就是:我用new来分配动态空间时居然也会出现错误(在KERNEL)!!!(我用了2张位图做界面大小4M左右;5个CFrameWnd、2个CSocket和CChildView类总共7k左右,还有2个数据库!!!)我想问一问大家,windows操作系统给我们提供的堆内存有多少???栈的空间又是多少!!是不是1G呢????(我机器内存64k,硬盘10G).是机顶盒.

我在CMainFrame里用CFrameWnd继承的类来做菜单窗口,这样是不是很不正确呢!!!!!!???
...全文
164 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bighead 2001-04-20
莫认栈1M,别的不知
回复
w12 2001-04-20
以前有人问过
SendMessage(AfxGetMainWnd()->m_hWnd,WM_COMMAND,MAKEWPARAM(ID_APP_EXIT,0),(LPARAM)NULL);
回复
wildinghorse 2001-04-20
结束时发送WM_CLOSE消息给程序,系统会帮你关闭你的进程的,具体的方法是
在响应函数里m_pMainWnd->SendMessage(WM_CLOSE,0,0);
这样就行了吧
回复
runrunrun 2001-04-20
1. 试试将PostQuitMessage(0); 改为 PostMessage(WM_CLOSE)。
2. 不应该用 delete AfxGetApp()->GetMainWnd();。 因为CWnd派生的类在退出时会删除掉自己的。
3. new 不应该出问题的。可能是内存不够用。你可以把虚拟内存设置大一点。 还有,在new完后要检查返回值是否是NULL。

回复
leesungyong 2001-04-20
还有一个问题,删除窗口对象时不应该使用delete,而是使用CWnd的成员函数DestroyWindow()。
回复
leesungyong 2001-04-20
你在程序运行期间分配的内存一一记录在操作系统的内存分配表中,退出程序的时候Windows操作系统会自动的完成内存回收(回收程序的代码段、数据段、堆栈断占用的空间,包括运行时分配的堆内存)。你需要注意的是程序运行期间的内存回收问题,程序退出时的内存回收不必管。
回复
hopelion 2001-04-20
大家多给我出出主意好么!!我在这谢谢大家的参与!!!!!!!
回复
hopelion 2001-04-20
wyzegg,你好!!首先谢谢你的回答,可是我用过exit(0)
但是程序不调用析构函数!!!和postquitmessage一样,结果照样出现内存泄漏!

bighead,你好!你知道怎么设置默认栈么?
回复
keyou 2001-04-20
我给大家一点分!!谢谢大家!!!!!我回去试一试!!!!!
回复
leesungyong 2001-04-20
退出时不要忘了关闭数据库连接,网络连接
回复
leesungyong 2001-04-20
退出时不要忘了关闭数据库连接,网络连接
回复
wyzegg 2001-04-19
_exit(0)不好吗
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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