【坑】一个线程参数引发的血案

void function1(){

  ThreadArg pArg;//他是个结构体指针

  pArg->s_1 = 1;

  pArg->s_2 = this;//关键就是这个,我是想把当前实例的指针让线程去做一些操作。

  int ret = pthread_create( &m_id, NULL, function2, (void *)pArg);

}

void * function2( void * p){

//code....

//调用this的某些public

}

结果悲剧了。。。。。时而报错,时而不报错。。。每次报错还不一样。原来就是pArg的声明周期结束了,导致this指针有时可能被覆盖有时可能没有,所以一切都是不确定的。于是把这个线程参数放在堆里面了,就没事了。。。以后不能再这样马虎了!

posted @ 2013-11-29 12:54  花考拉  阅读(204)  评论(0编辑  收藏  举报