我做了一个S/C的基于WINSOCKET的聊天程序,现在调试SERVER端应用程序时,发现有严重的内存泄露,我是用DEBUG的GO指令来调试程序的,结构清单如下:
Detected memory leaks!
Dumping objects ->
sockcore.cpp(836) : {877} normal block at 0x007A4090, 28 bytes long.
 Data: <    s           > CD CD CD CD 73 03 00 00 C0 00 00 00 20 00 00 00 
sockcore.cpp(836) : {787} normal block at 0x007A3470, 28 bytes long.
 Data: <    s           > CD CD CD CD 73 03 00 00 AC 00 00 00 20 00 00 00 
afxtempl.h(370) : {773} normal block at 0x007A30A0, 20 bytes long.
 Data: <)   )   $   $   > 29 00 00 00 29 00 00 00 24 00 00 00 24 00 00 00 
afxtempl.h(370) : {772} normal block at 0x007A3420, 20 bytes long.
 Data: <`&z `&z `Gz `Gz > 60 26 7A 00 60 26 7A 00 60 47 7A 00 60 47 7A 00 
afxtempl.h(370) : {761} normal block at 0x007A4930, 20 bytes long.
 Data: <$   $           > 24 00 00 00 24 00 00 00 CD CD CD CD CD CD CD CD 
afxtempl.h(370) : {760} normal block at 0x007A3140, 20 bytes long.
 Data: < 0z  0z         > 90 30 7A 00 90 30 7A 00 CD CD CD CD CD CD CD CD 
sockcore.cpp(836) : {692} normal block at 0x007A4650, 28 bytes long.
 Data: <    s           > CD CD CD CD 73 03 00 00 B4 00 00 00 20 00 00 00 
sockcore.cpp(836) : {690} normal block at 0x007A46A0, 28 bytes long.
 Data: <    s           > CD CD CD CD 73 03 00 00 B4 00 00 00 02 00 00 00 
sockcore.cpp(836) : {688} normal block at 0x007A3310, 28 bytes long.
 Data: <    s           > CD CD CD CD 73 03 00 00 B4 00 00 00 01 00 00 00 
afxtempl.h(370) : {687} normal block at 0x007A1AA0, 20 bytes long.
 Data: <,   ,           > 2C 00 00 00 2C 00 00 00 CD CD CD CD CD CD CD CD 
afxtempl.h(370) : {686} normal block at 0x007A33D0, 20 bytes long.
 Data: <PGz PGz         > 50 47 7A 00 50 47 7A 00 CD CD CD CD CD CD CD CD 
strcore.cpp(118) : {541} normal block at 0x007A3040, 26 bytes long.
 Data: <            192.> 01 00 00 00 0D 00 00 00 0D 00 00 00 31 39 32 2E 
D:\MyC over\TALK\TalkServer\ServerListenSocket.cpp(51) : {529} client block at 0x007A3880, subtype 0, 212 bytes long.
a CServerConnectThread object at $007A3880, 212 bytes long
strcore.cpp(118) : {495} normal block at 0x007A2040, 26 bytes long.
 Data: <            192.> 01 00 00 00 0D 00 00 00 0D 00 00 00 31 39 32 2E 
D:\MyC over\TALK\TalkServer\ServerListenSocket.cpp(51) : {483} client block at 0x007A3E70, subtype 0, 212 bytes long.
a CServerConnectThread object at $007A3E70, 212 bytes long
strcore.cpp(118) : {347} normal block at 0x007A2830, 26 bytes long.
 Data: <            192.> 01 00 00 00 0D 00 00 00 0D 00 00 00 31 39 32 2E 
D:\MyC over\TALK\TalkServer\ServerListenSocket.cpp(51) : {334} client block at 0x007A2210, subtype 0, 212 bytes long.
a CServerConnectThread object at $007A2210, 212 bytes long
Object dump complete.
这些东西我看不太懂,请高手指点!!!
谢谢,高分奉上!!!

解决方案 »

  1.   

    你可以双击Output看看造成Memory Leak的具体地点,比如双击这几行:
    D:\MyC over\TALK\TalkServer\ServerListenSocket.cpp(51) : {529} client block at 0x007A3880, subtype 0, 212 bytes long.
    D:\MyC over\TALK\TalkServer\ServerListenSocket.cpp(51) : {483} client block at 0x007A3E70, subtype 0, 212 bytes long.
    D:\MyC over\TALK\TalkServer\ServerListenSocket.cpp(51) : {334} client block at 0x007A2210, subtype 0, 212 bytes long.
      

  2.   

    我也看不明白,所以如果有可能的话把ServerListenSocket.cpp贴出来学习一把?
      

  3.   

    你的程序中有内存没有释放的地方。建议你用boundschecker或者purify检查,可以定位到是什么地方那粗泄漏。
      

  4.   

    为什么不用BoundsChecker?
    那不就一目了然了吗?
      

  5.   

    用boudchec吧,和vc集成的很好,在出现泄露的时候自己跳出来,真不错
      

  6.   

    好象是你的程序中自定义的一些结构或者new之类东西,没有把它们析构或者delete
      

  7.   

    我觉得很有可能是你的某条线程在程序退出的时候还没有终止,需要系统帮你终止了,所以建议你检查一下自己开的Worker Thread,看看是否有线程来不及终止或者不能终止。
      

  8.   

    D:\MyC over\TALK\TalkServer\ServerListenSocket.cpp(51) : {529} client block at 0x007A3880, subtype 0, 212 bytes long.已经说得很清楚了。定位到这一句,一定有new或malloc的东西没有并清除,按程序逻辑找一找就行了。
      

  9.   

    请告知BoundsChecker可以从哪儿下载,谢谢,马上给分
      

  10.   


    bounder checker 6.01,在这里下的,你去看看
    http://www.vckbase.com/tools/debug/BChecker6.01.zip
    s/n: 6109-00009B-9F
      

  11.   

    neosu(neo) 的说法正确,但是
    sockcore.cpp 是由于
    afxtempl是由于CArray由于你的Array没有释放,这个问题一般可以看其他的地方是否有指针没有释放,sockcore.cpp也是一样的原因
      

  12.   

    bounder checker 6.01,http://www.vckbase.com/tools/debug/BChecker6.01.zip
    s/n: 6109-00009B-9F