vc多线程中new的指针在另一个线程中怎么正确释放

vc多线程中new的指针在另一个线程中如何正确释放?
本帖最后由 VisualEleven 于 2013-07-29 11:40:17 编辑
如下测试:
unsigned int _stdcall b (LPVOID param)
{ char* q = NULL; 
q = (char*) param; 
if (q != NULL) {  delete q;  q = NULL; } 
printf("q地址:%d\n",&q,q); return 0;
}
unsigned int _stdcall a (LPVOID param)
{UINT uc; char* p = NULL; p = new char; *p = '1'; printf("P地址:%d,%s\n",&p,p); HANDLE threadb = (HANDLE)_beginthreadex(NULL,0,b,(LPVOID)p,0,&uc); 
CloseHandle(threadb); Sleep(3000); 
if (p == NULL) {  printf("P NULL"); } 
else {  printf("P NOT NULL"); } return 0;
}
int main(int argc, char* argv[]){ UINT un; HANDLE threada = (HANDLE)_beginthreadex(NULL,0,a,NULL,0,&un); CloseHandle(threada);
 
vc 指针 多线程 c++

------解决方案--------------------
全局指针?然后传入线程函数?
------解决方案--------------------
p已经在线程b里释放了
但b (LPVOID param),如果要改变param的值,得传param的地址
------解决方案--------------------
引用:
哪里申请,在哪里释放较好



哪里一般指的是Module,和线程无关。
------解决方案--------------------
我一般是new需要的结构体传递给线程.线程return的地方delete他.
不敢传递栈变量.多线程运行顺序不定性.会蛋疼.关键还是变量生存期要长.
当然简单变量.int 啥的 无所谓 直接param传递就ok
------解决方案--------------------
如果要是a中不用这个p指针的话,再b中释放是可以的,并不会造成内存泄露