pthread_create 传递参数时指针跑飞问题
2013-12-27 09:50
197 查看
http://blog.sina.com.cn/s/blog_7e25c3ad0101nxn3.html
今天在使用pthread_create的时候遇到了一个问题,传递的arg指针跑飞了,使用如下:
PthreadArgs arg;
if (pthread_create(&pid, NULL, ThreadFunc, reinterpret_cast (&arg)) != 0)
在ThreadFunc函数里:
PthreadArgs *tmp_arg = reinterpret_cast (args);
但是arg 和 tmp_arg里的内容确不相同,指针跑飞了。
问题困扰了很久,才知道原因,PthreadArgs arg,是在原有的线程里面的栈上分配的变量,在新的线程里面在访问其它线程的栈空间是有问题的。
解决方法是,new一个PthreadArgs *arg,在堆上分配空间,然后在ThreadFunc里面消除
注意一定要在线程函数ThreadFunc里面删除,如果在外面的线程删除的话,是没办法判断里面的线程是否已经用完了该数据的
具体如下:
PthreadArgs *arg = new PthreadArgs();
pthread_create(&pid, NULL, ThreadFunc, reinterpret_cast (arg);
在ThreadFunc里面:
PthreadArgs *tmp_arg = reinterpret_cast (args);
用完之后delete:delete tmp_arg;
今天在使用pthread_create的时候遇到了一个问题,传递的arg指针跑飞了,使用如下:
PthreadArgs arg;
if (pthread_create(&pid, NULL, ThreadFunc, reinterpret_cast (&arg)) != 0)
在ThreadFunc函数里:
PthreadArgs *tmp_arg = reinterpret_cast (args);
但是arg 和 tmp_arg里的内容确不相同,指针跑飞了。
问题困扰了很久,才知道原因,PthreadArgs arg,是在原有的线程里面的栈上分配的变量,在新的线程里面在访问其它线程的栈空间是有问题的。
解决方法是,new一个PthreadArgs *arg,在堆上分配空间,然后在ThreadFunc里面消除
注意一定要在线程函数ThreadFunc里面删除,如果在外面的线程删除的话,是没办法判断里面的线程是否已经用完了该数据的
具体如下:
PthreadArgs *arg = new PthreadArgs();
pthread_create(&pid, NULL, ThreadFunc, reinterpret_cast (arg);
在ThreadFunc里面:
PthreadArgs *tmp_arg = reinterpret_cast (args);
用完之后delete:delete tmp_arg;
相关文章推荐
- pthread_create 参数传递指针问题
- pthread_create 参数传递指针问题(创建多线程时,循环变量的传递)
- pthread_create 参数传递指针问题
- pthread_create 参数传递指针问题
- pthread_create 参数传递指针问题
- pthread_create传递线程参数需要注意的问题
- 函数的指针参数传递问题--理解指针变量
- 函数参数的传递问题(指针的指针)
- 指针作为函数参数传递的问题
- 函数参数用指针或引用传递时发现的一个小问题
- 函数参数的传递问题(指针的指针)
- 指针作为函数的参数传递的问题
- 实例解析使用指针作为函数参数传递需要注意的问题
- 使用pthread_create时参数的传递
- pthread_create 报函数参数不匹配问题
- 函数参数的传递问题(一级指针和二级指针)
- c语言 函数 用指针传递参数 问题
- 函数参数的传递 动态内存传递问题(指针的指针)
- c++之指针作为函数参数传递的问题
- [转载]pthread_create传递参数/单个或者多个