strcore.cpp内存泄露 .

本文探讨了一个由BSTR与CString类型不匹配引起内存泄露的问题。问题出现在一个函数在EXE与DLL间调用时,由于参数类型定义不同而导致的。EXE中的函数期望接收BSTR类型,而在DLL中却传递了CString类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/treaturebeauty/article/details/1710697(原帖)

detect memory leak!

f:/rtm/vctools/vc7libs/ship/atlmfc/src/mfc/strcore.cpp(141)   ......

查看output窗口,程序中不知何时出现了内存泄露的问题。经过一阵排查,发现是由于一个函数在两个模块中的字符串参数类型定义不一致引起的。该函数实现在EXE中,参数定义为BSTR,在DLL中进行调用(回调喽),DLL中将函数原型参数定义为CString。这样一来编译器是无法发现问题的。
想必是DLL原本传了一个CString过去,中途mfc发现需要转换成BSTR,于是只好苦水往肚里咽,偷偷分配了一块内存,变成了BSTR,临了也没人知道那块内存要释放。
以下像是因为添加_CrtDumpMemoryLeaks()的打印,帮我进一步分析 Detected memory leaks! Dumping objects -> D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\plex.cpp(29) : {5848} normal block at 0x013B56C0, 128 bytes long. Data: <H > V; > > 48 15 3E 01 CD CD CD CD D4 56 3B 01 BC 15 3E 01 {5024} client block at 0x013B3DB8, subtype c0, 112 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CMFCToolBarButton object at $013B3DB8, 112 bytes long {5023} client block at 0x013B2B98, subtype c0, 112 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CMFCToolBarButton object at $013B2B98, 112 bytes long D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\plex.cpp(29) : {5022} normal block at 0x013B4D20, 128 bytes long. Data: < 4M; > 00 00 00 00 CD CD CD CD 34 4D 3B 01 00 00 00 00 {5021} client block at 0x013B31D8, subtype c0, 112 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CMFCToolBarButton object at $013B31D8, 112 bytes long D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\plex.cpp(29) : {5020} normal block at 0x01395E88, 168 bytes long. Data: < w = > 00 00 00 00 CD CD CD CD 77 00 00 00 98 06 3D 01 D:\a\_work\1\s\src\vctools\vc7libs\ship\atlmfc\include\afxtempl.h(1434) : {5019} normal block at 0x013E54B0, 68 bytes long. Data: < ^9 > 90 5E 39 01 00 00 00 00 00 00 00 00 00 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\afxcontextmenumanager.cpp(581) : {5018} client block at 0x013D0698, subtype c0, 28 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CObList object at $013D0698, 28 bytes long D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {5012} normal block at 0x013E89E8, 44 bytes long. Data: < v5y > 04 76 35 79 0D 00 00 00 0D 00 00 00 01 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {5009} normal block at 0x013E8150, 44 bytes long. Data: < v5y > 04 76 35 79 0D 00 00 00 0D 00 00 00 01 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {5005} normal block at 0x0138D7E8, 44 bytes long. Data: < v5y > 04 76 35 79 0D 00 00 00 0D 00 00 00 01 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {2640} normal block at 0x0137F1D0, 22 bytes long. Data: < v5y > 04 76 35 79 02 00 00 00 02 00 00 00 01 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\plex.cpp(29) : {2639} normal block at 0x01395390, 168 bytes long. Data: < 7 9 > 00 00 00 00 CD CD CD CD E0 F1 37 01 9B 00 39 03 D:\a\_work\1\s\src\vctools\vc7libs\ship\atlmfc\include\afxtempl.h(1434) : {2638} normal block at 0x013E5050, 68 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\plex.cpp(29) : {2637} normal block at 0x01395030, 168 bytes long. Data: < w 9 > 00 00 00 00 CD CD CD CD 77 00 00 00 9B 00 39 03 D:\a\_work\1\s\src\vctools\vc7libs\ship\atlmfc\include\afxtempl.h(1434) : {2636} normal block at 0x013E4F00, 68 bytes long. Data: <8P9 > 38 50 39 01 00 00 00 00 00 00 00 00 00 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\plex.cpp(29) : {722} normal block at 0x013E1548, 128 bytes long. Data: < \ > > 00 00 00 00 CD CD CD CD 5C 15 3E 01 00 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\plex.cpp(29) : {264} normal block at 0x01396340, 128 bytes long. Data: < > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 {263} client block at 0x0138E1B8, subtype c0, 32 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CDocManager object at $0138E1B8, 32 bytes long D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {262} normal block at 0x013962B8, 90 bytes long. Data: < v5y$ $ > 04 76 35 79 24 00 00 00 24 00 00 00 01 00 00 00 C:\Users\yi-lo\Desktop\ICT\ICT\ICT.cpp(94) : {261} client block at 0x01391048, subtype c0, 176 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CMultiDocTemplate object at $01391048, 176 bytes long {260} client block at 0x01396000, subtype c0, 648 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CObject object at $01396000, 648 bytes long {259} client block at 0x01384DF0, subtype c0, 4 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CObject object at $01384DF0, 4 bytes long {258} client block at 0x01390FB8, subtype c0, 100 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CObject object at $01390FB8, 100 bytes long D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {256} normal block at 0x0138E398, 30 bytes long. Data: < v5y > 04 76 35 79 06 00 00 00 06 00 00 00 01 00 00 00 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {255} normal block at 0x01390F58, 50 bytes long. Data: < v5y > 04 76 35 79 10 00 00 00 10 00 00 00 01 00 00 00 {254} normal block at 0x01390D00, 20 bytes long. Data: < v5y v5y v5y> 04 00 00 00 18 76 35 79 18 76 35 79 18 76 35 79 {253} normal block at 0x0138DEE8, 32 bytes long. Data: < x 9 h 9 > BC B0 CB 78 04 00 00 00 04 0D 39 01 68 0F 39 01 D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\strcore.cpp(156) : {243} normal block at 0x0138E5C8, 36 bytes long. Data: < v5y > 04 76 35 79 09 00 00 00 09 00 00 00 01 00 00 00 {242} client block at 0x01382398, subtype c0, 12 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CObject object at $01382398, 12 bytes long {172} client block at 0x01386A70, subtype c0, 64 bytes long. D:\a\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\dumpcont.cpp(23) : atlTraceGeneral - a CDynLinkLibrary object at $01386A70, 64 bytes long {162} normal block at 0x01383008, 332 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {161} normal block at 0x01382E88, 332 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {160} normal block at 0x01382D10, 332 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {159} normal block at 0x01382B98, 332 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {158} normal block at 0x01382A20, 332 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Object dump complete.
最新发布
08-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值