⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_58921.htm

📁 vc
💻 HTM
字号:
<p>
序号:58921 发表者:金枪鱼 发表日期:2003-11-04 22:17:05
<br>主题:PostQuitMesaage出现内存泄漏
<br>内容:SDI程序,分割成3各视,有一个视为CFormView类型,其中有一些组合框控件,其数据从数据库中装载。<BR>如果组合框数据装载失败,我需要程序退出。装载成功时,一切工作正常。<BR>但如果装载失败,我PostQuitMessage(0);程序倒是退出了,却告诉我内存泄漏!如下:<BR>---------------<BR>Warning: destroying CSingleDocTemplate with live document.<BR>Detected memory leaks!<BR>Dumping objects -&gt;<BR>{664} normal block at 0x003797A8, 532 bytes long.<BR> Data: &lt;(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; 28 F9 15 00 D4 01 00 00 3C 00 00 00 00 00 00 00 <BR>{656} normal block at 0x00377BF0, 23 bytes long.<BR> Data: &lt;&nbsp;&nbsp;2|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; D8 9C 32 7C 06 00 00 00 06 00 00 00 01 00 00 00 <BR>plex.cpp(32) : {650} normal block at 0x003774B8, 124 bytes long.<BR> Data: &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z7 &gt; 00 00 00 00 00 00 00 00 00 00 00 00 0C 7A 37 00 <BR>{646} normal block at 0x00376DC0, 30 bytes long.<BR> Data: &lt;&nbsp;&nbsp;2|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; D8 9C 32 7C 0D 00 00 00 0D 00 00 00 01 00 00 00 <BR>{645} client block at 0x003772B0, subtype c0, 260 bytes long.<BR>a CABListView object at $003772B0, 260 bytes long<BR>{639} client block at 0x00376EE0, subtype c0, 916 bytes long.<BR>a CABQueryFormView object at $00376EE0, 916 bytes long<BR>plex.cpp(32) : {635} normal block at 0x00376E28, 124 bytes long.<BR> Data: &lt;&nbsp;&nbsp;&nbsp;&nbsp;8n7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k7 &gt; 00 00 00 00 38 6E 37 00 00 00 00 00 80 6B 37 00 <BR>{631} client block at 0x00376B80, subtype c0, 364 bytes long.<BR>a CABAdFormView object at $00376B80, 364 bytes long<BR>{630} normal block at 0x00377D78, 36 bytes long.<BR> Data: &lt;Q&nbsp;&nbsp; Q&nbsp;&nbsp; Q&nbsp;&nbsp; |&nbsp;&nbsp; &gt; 51 00 00 00 51 00 00 00 51 00 00 00 7C 00 00 00 <BR>{629} normal block at 0x00376038, 12 bytes long.<BR> Data: &lt;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; 00 00 00 00 64 00 00 00 1C 03 00 00 <BR>{625} normal block at 0x00377C88, 28 bytes long.<BR> Data: &lt;&nbsp;&nbsp;2|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; D8 9C 32 7C 0B 00 00 00 0B 00 00 00 01 00 00 00 <BR>f:\myvc7projects\...\...\mainfrm.cpp(22) : {622} client block at 0x00377938, subtype c0, 636 bytes long.<BR>a CMainFrame object at $00377938, 636 bytes long<BR>f:\myvc7projects\...\...\....cpp(16) : {621} client block at 0x003778A8, subtype c0, 84 bytes long.<BR>a C....Doc object at $003778A8, 84 bytes long<BR>Object dump complete.<BR>线程 '$E2' (0xaf0) 已退出,返回值为 0 (0x0)。<BR>----------------<BR>我的程序基本上用不到其中的文档类(所以没有与分视关联),似乎也没有什么动态分配的指针,并且我在ExitInstance函数中处理了我需要销毁和释放全局资源。我没有弄明白怎么会内存泄漏,是不是PostQuitMessage函数会跳过一些处理,请高手指点!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-11-04 23:37:23
<br>内容:这个不是你的postquitmessage引起的吧<BR>内存泄漏都是在程序结束后才dump出来的<BR>你postquitmessage后,程序就结束,然后就dump,这是很自然的阿<BR>跟postquitmessage没什么关系<BR>并不是说是postquitmessage导致memory leak<BR><BR>内存泄漏是个整体概念。是指程序申请了多少,最后就要释放多少。程序到地释放了没有,是程序退出时才知道的,不是程序运行时才知道的。当然,如果程序退出后,发现有内存泄漏,这个泄漏必然是程序运行时导致的。<BR><BR>注意看plex.cpp(32)<BR>表示plex.cpp中32行申请的内存没有得到释放,你自己检查检查
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-11-05 00:06:13
<br>内容:我的程序中没有plex.cpp这个文件啊!<BR>而且我不用PostQuitMessage,它就不出现内存泄漏。<BR>2003-11-5 0:12:14

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -