//先定义一个结构:
typedef struct  structname{
                int nnn1;
                CString str1;
             }//然后想让该结构的值作为线程参数传递:
           structname*  pstr1=new structname();
//然后创建线程:
           createthread(0,0,&threadproc,(LPVOID)pstr1,null,null);
-------------------------------------------------------------------
1、主函数中,new之后没有出现释放pstr1的语句
2、线程函数中再没有出现释放pstr1的语句出现请问:这样有内存泄露吗?为什么?怎么处理?

解决方案 »

  1.   

    当然有了,
    等线程结束delete
    或者在线程内部delete
      

  2.   

    同意楼上的,new 和 delete一定要成对出现,谁new的谁delete
      

  3.   

    同意楼上的 谁new 谁delete.
    如果主线程new了,别的线程delete,理论是没错的,但编译器老是告诉你这是危险的..呵呵.并且执行时老是弹出错误对话框.
      

  4.   

    typedef struct  structname{
                    int nnn1;
                    CString str1;
                 }//然后想让该结构的值作为线程参数传递:
               structname*  pstr1=new structname();    //然后创建线程:
               createthread(0,0,&threadproc,(LPVOID)pstr1,null,null);
               structname*  pstr1=new structname(); 向作为全局得??做全局得不用释放内存
    不是全局,在线程结束得时候释放内存.
      

  5.   

    只要是new出来的东西不用delete去释放内存就会有内存泄漏
      

  6.   

    关于内存泄露,解决方法有很多简单一点可以用CRT DebugHeap
    或者用pageheap的trace功能
    如果工程很大,可以用微软的 IIS DebugDiagnose Tool关于前面两点在下面的paper中都有介绍。如果觉得有帮助请多推广:
    http://blogs.msdn.com/lixiong/
      

  7.   

    首先,即使pstr1是全局指針,不对它delete,也会ML(memory leak,别想歪了)
    其次,应该是哪个线程alloc, 就由它free.
    最后,建议在线程函数中拷贝一份自己的参数,但主线程当然要等线程函数拷贝完成了再delete pstr1.
                                                            http://blog.csdn.net/dusj
      

  8.   

    如果在主线程中new了,在目标线程中如何delete?因为是把new的对象传给了目标线程函数的lpparam,所以我在线程函数中对lpparam使用完毕后加入了“delete lpparam;”,但出错现在我在主线程中用malloc分配内存:structname*  pstr1=malloc(sizeof (structname));
    然后在目标线程函数中对lpparam使用完毕后加入了“free(lpparam);”,没有了报错。
    问题是,这样做能把分配的内存释放吗?如果在主函数中释放内存,一般怎么控制释放的时机?
      

  9.   

    因为是把new的对象传给了目标线程函数的lpparam,所以我在线程函数中对lpparam使用完毕后加入了“delete lpparam;”,但出错--------------------------------------
    我刚才试验过了,可以在目标线程中delete,你再检查一下,再说了malloc free 和new delete应该是一样的,既然后者可以,前者一定也可以
    究其原因,同一进程中的线程是共享进程的内存空间的,当然可以在目标线程中释放如果在主函数中释放内存,一般怎么控制释放的时机?
    ----------------------------------
    可以等线程运行结束