文章类型: VC&C++
关键词: vc2010开发,mfc,单文档程序,关闭,提示内存泄露
内容摘要: vc2010开发的mfc单文档程序,关闭时,提示内存泄露

vc2010开发的mfc单文档程序,关闭时,提示内存泄露

2017/8/31 17:10:04    来源:apple    阅读:

用vc2010开发的mfc单文档程序,使用了多线程、sql server2000数据库、UDP收发数据,

程序关闭退出时,提示内存泄露:


Detected memory leaks!

Dumping objects ->

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {188279} normal block at 0x03416A68, 56 bytes long.

 Data: <   x            > 84 CF B1 78 13 00 00 00 13 00 00 00 01 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {187156} normal block at 0x033FA058, 26 bytes long.

 Data: <   x            > 84 CF B1 78 04 00 00 00 04 00 00 00 02 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {187151} normal block at 0x03381DE0, 406 bytes long.

 Data: <   x            > 84 CF B1 78 C2 00 00 00 C2 00 00 00 01 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(188) : {187149} normal block at 0x03414FF0, 92 bytes long.

 Data: <   x%   %       > 84 CF B1 78 25 00 00 00 25 00 00 00 03 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {187148} normal block at 0x034139D0, 88 bytes long.

 Data: <   x#   #       > 84 CF B1 78 23 00 00 00 23 00 00 00 01 00 00 00 

{186975} normal block at 0x03416890, 24 bytes long.

 Data: <H 9  s@  dA X6A > 48 C8 39 03 10 73 40 03 F0 64 41 03 58 36 41 03 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186974} normal block at 0x034161D8, 38 bytes long.

 Data: <   x            > 84 CF B1 78 0A 00 00 00 0A 00 00 00 02 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186911} normal block at 0x034164E0, 38 bytes long.

 Data: <   x            > 84 CF B1 78 0A 00 00 00 0A 00 00 00 01 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186904} normal block at 0x034163E8, 182 bytes long.

 Data: <   xR   R       > 84 CF B1 78 52 00 00 00 52 00 00 00 01 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186893} normal block at 0x0339C838, 44 bytes long.

 Data: <   x            > 84 CF B1 78 0D 00 00 00 0D 00 00 00 01 00 00 00 

{186889} normal block at 0x033838D0, 8 bytes long.

 Data: <  $     > 9C F4 24 06 00 00 00 00 

{186887} normal block at 0x03383C48, 12 bytes long.

 Data: < s@ X6A   9 > 10 73 40 03 58 36 41 03 E0 C7 39 03 

{186885} normal block at 0x0039D0A0, 8 bytes long.

 Data: <  $     > F8 F4 24 06 00 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186880} normal block at 0x03413DF8, 194 bytes long.

 Data: <   xX   X       > 84 CF B1 78 58 00 00 00 58 00 00 00 01 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186879} normal block at 0x033D8E88, 20 bytes long.

 Data: <   x            > 84 CF B1 78 01 00 00 00 01 00 00 00 01 00 00 00 

{186878} normal block at 0x03400D50, 12 bytes long.

 Data: < s@ X6A   9 > 10 73 40 03 58 36 41 03 E0 C7 39 03 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(188) : {186877} normal block at 0x0339C7D0, 44 bytes long.

 Data: <   x            > 84 CF B1 78 0A 00 00 00 0D 00 00 00 04 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(188) : {186869} normal block at 0x03413648, 44 bytes long.

 Data: <   x            > 84 CF B1 78 0A 00 00 00 0D 00 00 00 03 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(188) : {186861} normal block at 0x03407300, 44 bytes long.

 Data: <   x            > 84 CF B1 78 0A 00 00 00 0D 00 00 00 04 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186854} normal block at 0x03412A98, 20 bytes long.

 Data: <   x            > 84 CF B1 78 01 00 00 00 01 00 00 00 01 00 00 00 

{186853} normal block at 0x034124A8, 8 bytes long.

 Data: <P $     > 50 F6 24 06 00 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {186852} normal block at 0x0339C8E8, 36 bytes long.

 Data: <   x            > 84 CF B1 78 09 00 00 00 09 00 00 00 02 00 00 00 

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {32379} client block at 0x034123C0, subtype c0, 68 bytes long.

a CWinThread object at $034123C0, 68 bytes long

Object dump complete.



思路:可以用鼠标在其中的一个提示上双击,一般就会跳到泄露内存的地方,这样就可以看出是哪个变量没被释放,另外,可以先把操作数据库的代码屏蔽掉,看看还有没有,如果还有,就再屏蔽UDP通信,一个一个试,逐渐缩小范围查找。


解决途径:

问题解决了,估计是关闭软件析构产生的问题:

1、MainFrm类收到UDP数据并处理后,向View类发送消息SendMessage要求更新View图形显示;

   ---SendMessage发送后,View已经析构掉,故不能返回;


2、MainFrm类收到UDP数据并处理后,向MainFrm类的控件成员变量更新显示字符串;

   ---在析构的时候,操作到了已经不存在的控件成员变量

↑ 上一篇文章:VC++内存泄漏的检测与定位 关键词:VC++,内存泄漏,检测,定位 发布日期:2017/8/31 17:06:50
↓ 下一篇文章:关于MFC下检查和消除内存泄露的技巧 关键词:MFC,检查,消除,内存泄露,技巧,VC++,CRT,调.. 发布日期:2017/8/31 17:11:34
相关文章:
UpdateData() 是MFC的窗口函数,用来刷新数据的 关键词:UpdateData(),是MFC的窗口函数,用来刷新数据的 发布日期:2016-10-17 15:27
MFC中设置static text控件的背景色、字体、字号和颜色 关键词:MFC中设置static,text控件的背景色、字体、字号和颜色 发布日期:2016-11-10 17:45
使用VC6.0对MFC源代码挖掘 关键词:VC,6.0,MFC,源代码 发布日期:2016-08-19 11:25
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......