vc多线程中new的指针在另一个线程中怎么正确释放
vc多线程中new的指针在另一个线程中如何正确释放?
如下测试:
------解决方案--------------------
全局指针?然后传入线程函数?
------解决方案--------------------
p已经在线程b里释放了
但b (LPVOID param),如果要改变param的值,得传param的地址
------解决方案--------------------
哪里一般指的是Module,和线程无关。
------解决方案--------------------
我一般是new需要的结构体传递给线程.线程return的地方delete他.
不敢传递栈变量.多线程运行顺序不定性.会蛋疼.关键还是变量生存期要长.
当然简单变量.int 啥的 无所谓 直接param传递就ok
------解决方案--------------------
如果要是a中不用这个p指针的话,再b中释放是可以的,并不会造成内存泄露
如下测试:
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中释放是可以的,并不会造成内存泄露