请教关于VS2010中判断内存泄漏的问题?

时间:2022-12-26 05:43:08
以前一直都用vc6.0的,当时检查内存泄漏主要用的是VC的 _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF)函数和Bounds Checker工具。长时间不用第一种方法已经不会用了。在2010中安装Bounds Checker好像用不了,安装后没有相应的工具栏,不知是不是不支持2010。

请问高手2010中有没有什么定位内存泄露的工具或方法?Bounds Checker有没有在2010下可用的版本?

谢谢!!

Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {45857} normal block at 0x023086A0, 44 bytes long.
 Data: <   R            > 84 CF CE 52 0D 00 00 00 0D 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {45856} normal block at 0x023085C0, 164 bytes long.
 Data: <          ^   0 > 00 00 00 00 00 00 00 00 EE 19 5E B4 B0 86 30 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\map_sp.cpp(83) : {45855} normal block at 0x02308540, 68 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtooltipctrl.cpp(39) : {45853} client block at 0x02308350, subtype c0, 252 bytes long.
a CMFCToolTipCtrl object at $02308350, 252 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {45835} normal block at 0x02302C60, 40 bytes long.
 Data: <   R            > 84 CF CE 52 0B 00 00 00 0B 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {45834} normal block at 0x02307AE0, 164 bytes long.
 Data: <        ox  p,0 > 00 00 00 00 00 00 00 00 6F 78 EA CD 70 2C 30 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\map_sp.cpp(83) : {45833} normal block at 0x02307880, 68 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtooltipctrl.cpp(39) : {45832} client block at 0x023079A8, subtype c0, 252 bytes long.
a CMFCToolTipCtrl object at $023079A8, 252 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {45813} normal block at 0x02307088, 38 bytes long.
 Data: <   R            > 84 CF CE 52 0A 00 00 00 0A 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {45812} normal block at 0x02306FA8, 164 bytes long.
 Data: <        T  & p0 > 00 00 00 00 00 00 00 00 54 98 F9 26 98 70 30 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\map_sp.cpp(83) : {45811} normal block at 0x02306F28, 68 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtooltipctrl.cpp(39) : {45810} client block at 0x02303840, subtype c0, 252 bytes long.
a CMFCToolTipCtrl object at $02303840, 252 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {45790} normal block at 0x02303498, 38 bytes long.
 Data: <   R            > 84 CF CE 52 0A 00 00 00 0A 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {45789} normal block at 0x023033B8, 164 bytes long.
 Data: <         ?X  40 > 00 00 00 00 00 00 00 00 D6 3F 58 C0 A8 34 30 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\map_sp.cpp(83) : {45788} normal block at 0x02302E00, 68 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtooltipctrl.cpp(39) : {45787} client block at 0x02302CC8, subtype c0, 252 bytes long.
a CMFCToolTipCtrl object at $02302CC8, 252 bytes long
Object dump complete.

9 个解决方案

#1


没用过2010,不过第一种方法比较通用。

#2


微软这么多年在这方面不会没有考虑到吧?

大家有没有其它建议?

#3


LeakDiag, UMDH这些微软的工具都可以诊断内存泄漏 
如果是CE 上,要用Application verifier

#4


vld 库试试,google 搜下vld 

#5


该库是嵌入到工程中的,用于检测内存泄露

#6


不懂    学习下

#7


我觉得,最好的方式是要培养好的习惯,有new的地方同时写下delete。
对于大部分的内存泄露一般是new以后没delete引起的,可以用vs2005中的搜索功能,搜索所有的new然后查看哪个new后面没有delete。

#8


帮顶。

#9


我也想问下,感觉即使new 和 delete也会有内存泄露的地方
只不过比较少,想问下是为什么呀

#1


没用过2010,不过第一种方法比较通用。

#2


微软这么多年在这方面不会没有考虑到吧?

大家有没有其它建议?

#3


LeakDiag, UMDH这些微软的工具都可以诊断内存泄漏 
如果是CE 上,要用Application verifier

#4


vld 库试试,google 搜下vld 

#5


该库是嵌入到工程中的,用于检测内存泄露

#6


不懂    学习下

#7


我觉得,最好的方式是要培养好的习惯,有new的地方同时写下delete。
对于大部分的内存泄露一般是new以后没delete引起的,可以用vs2005中的搜索功能,搜索所有的new然后查看哪个new后面没有delete。

#8


帮顶。

#9


我也想问下,感觉即使new 和 delete也会有内存泄露的地方
只不过比较少,想问下是为什么呀