vc2010开发的mfc单文档程序,关闭时,提示内存泄露
用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.
请大家帮忙看看,什么地方出了问题?如何解决?
[解决办法]
……这怎么可能就直接能看出来?
不过多线程的话,不是正常结束的进程,而是在调试过程中直接中止,很容易出现内存泄露的
[解决办法]
找个内存泄露测试软件查查
[解决办法]
检查你所有调用过new的位置
看看对应的delete有没有问题
[解决办法]
建议楼主检查所有的CString::GetBuffer函数调用之后是否都用了CString::ReleaseBuffer进行释放。
[解决办法]
可以用鼠标在其中的一个提示上双击,一般就会跳到泄露内存的地方,这样就可以看出是哪个变量没被释放,另外,可以先把操作数据库的代码屏蔽掉,看看还有没有,如果还有,就再屏蔽UDP通信,一个一个试,逐渐缩小范围查找