//先定义一个结构:
typedef struct structname{
int nnn1;
CString str1;
}//然后想让该结构的值作为线程参数传递:
structname* pstr1=new structname();
//然后创建线程:
createthread(0,0,&threadproc,(LPVOID)pstr1,null,null);
-------------------------------------------------------------------
1、主函数中,new之后没有出现释放pstr1的语句
2、线程函数中再没有出现释放pstr1的语句出现请问:这样有内存泄露吗?为什么?怎么处理?
typedef struct structname{
int nnn1;
CString str1;
}//然后想让该结构的值作为线程参数传递:
structname* pstr1=new structname();
//然后创建线程:
createthread(0,0,&threadproc,(LPVOID)pstr1,null,null);
-------------------------------------------------------------------
1、主函数中,new之后没有出现释放pstr1的语句
2、线程函数中再没有出现释放pstr1的语句出现请问:这样有内存泄露吗?为什么?怎么处理?
等线程结束delete
或者在线程内部delete
如果主线程new了,别的线程delete,理论是没错的,但编译器老是告诉你这是危险的..呵呵.并且执行时老是弹出错误对话框.
int nnn1;
CString str1;
}//然后想让该结构的值作为线程参数传递:
structname* pstr1=new structname(); //然后创建线程:
createthread(0,0,&threadproc,(LPVOID)pstr1,null,null);
structname* pstr1=new structname(); 向作为全局得??做全局得不用释放内存
不是全局,在线程结束得时候释放内存.
或者用pageheap的trace功能
如果工程很大,可以用微软的 IIS DebugDiagnose Tool关于前面两点在下面的paper中都有介绍。如果觉得有帮助请多推广:
http://blogs.msdn.com/lixiong/
其次,应该是哪个线程alloc, 就由它free.
最后,建议在线程函数中拷贝一份自己的参数,但主线程当然要等线程函数拷贝完成了再delete pstr1.
http://blog.csdn.net/dusj
然后在目标线程函数中对lpparam使用完毕后加入了“free(lpparam);”,没有了报错。
问题是,这样做能把分配的内存释放吗?如果在主函数中释放内存,一般怎么控制释放的时机?
我刚才试验过了,可以在目标线程中delete,你再检查一下,再说了malloc free 和new delete应该是一样的,既然后者可以,前者一定也可以
究其原因,同一进程中的线程是共享进程的内存空间的,当然可以在目标线程中释放如果在主函数中释放内存,一般怎么控制释放的时机?
----------------------------------
可以等线程运行结束