本帖最后由 VisualEleven 于 2013-05-31 16:38:09 编辑

解决方案 »

  1.   

    “IP”  这个字符串是IP吗?  拿个非法ip来测试  出什么问题自己去看源码...
      

  2.   

    thread_handle = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)thread_main,
    mySocket,0,&thread_tid);
      

  3.   

    这只是举例用,程序中当然是正常的IP。或者这么说,如果线程函数里面没有CString strTmpIP = pSocket->strIP;都是一些int型,比如int nPort = pSocket->nPort;结果就没有泄露,但是只要你用上CString,就有泄露提示,地址偏移为0x10.
      

  4.   

    mySocket是我定义的,如下
    typedef struct 
    {
    CString strIP;
    CString strName;
    int nPort;
    } MySocket;
    和这个没关系,这个值正确传过去了。如果线程函数里面没有CString strTmpIP = pSocket->strIP;都是一些int型,比如int nPort = pSocket->nPort;结果就没有泄露,但是只要你用上CString,就有泄露提示,地址偏移为0x10.自己试试看
      

  5.   

    StartMonitorThread里的MySocket* mySocket = new MySocket(); 这个没释放吧
      

  6.   

    StartMonitorThread函数中你new了一个MySocket对象的指针,你并没有delete它?
      

  7.   


    MySocket* pSocket = (MySocket*)lpParam;

        delete pSocket;这里不是啊,不是我分配的内存没释放,提示的是f盘,可是我只有C,D盘,是系统自己分配的内存。
      

  8.   


    MySocket* pSocket = (MySocket*)lpParam;

        delete pSocket;这里不是啊,不是我分配的内存没释放,提示的是f盘,可是我只有C,D盘,是系统自己分配的内存。
      

  9.   

    我觉得应该是线程函数里面不能使用CString。但是为什么地址会偏移0x10,这是我好奇的地方
      

  10.   


    MySocket* pSocket = (MySocket*)lpParam;

        delete pSocket;这里不是啊,不是我分配的内存没释放,提示的是f盘,可是我只有C,D盘,是系统自己分配的内存。
    你并没有将它传递给你的线程函数~
      

  11.   


    MySocket* pSocket = (MySocket*)lpParam;

        delete pSocket;这里不是啊,不是我分配的内存没释放,提示的是f盘,可是我只有C,D盘,是系统自己分配的内存。
    你并没有将它传递给你的线程函数~
    额,代码被我弄替代方案的时候改错了
    应该是thread_handle = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)thread_main,
    mySocket,0,&thread_tid);
    我说了,我分配的都释放了,用VLD提示没有内存泄露,但是vs2010本身提示有,觉得好奇,跟踪了一下,结果发现这个地址好奇怪