当前位置: 技术问答>linux和unix
多线程内存释放的问题?
来源: 互联网 发布时间:2016-06-13
本文导语: 本帖最后由 zhoukunta 于 2009-06-22 11:59:05 编辑 我用父线程函数创建线程,并为每一个子线程传递一个thread_date结构的已分配空间的地址,在子线程中进行释放,如红色区域所示,我释放的方法换了好多(如红色所示),...
待传递给子线程的数据结构
struct thread_date
{
string ip;
string path;
};
父线程函数创建线程
int DeleteMultiThread(string watchbuf,string pathdes,remote_id *rid,int ridnum)
{
...
for(int i=0;iip=rid[i].ip;
ip_path->path=pathdes;
int res = pthread_create(&(a_thread[i]),&thread_attr,ClientThread, (void*)ip_path);
}
return 0;
}
被调用的子线程
******************************************************************************/
void *ClientThread(void *arg)
{
thread_date* date = (thread_date*)arg;
const char* path = (date->path).c_str();
const char* ip = (date->ip).c_str();
printf("ClientThread is running. Argument was %sn",(date->ip).c_str());
delete arg;//delete []arg; delete []date delete date free(arg) free(date)
pthread_exit(NULL);
}//end function
|
thread_date *ip_path = new thread_date[sizeof(thread_date)];
这句有问题 这样声明是开辟了一个thread_date的数组,大小是sizeof(thread_date)
改成thread_date *ip_path = new thread_date;
或者
thread_date *ip_path = (thread_date *)malloc(sizeof(thread_date))
这句有问题 这样声明是开辟了一个thread_date的数组,大小是sizeof(thread_date)
改成thread_date *ip_path = new thread_date;
或者
thread_date *ip_path = (thread_date *)malloc(sizeof(thread_date))
|
delete arg换成delete []date
|
delete释放数组用在后面加[]