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

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指针有时可能被覆盖有时可能没有,所以一切都是不确定的。于是把这个线程参数放在堆里面了,就没事了。。。以后不能再这样马虎了!

原文地址:https://www.cnblogs.com/colorfulkoala/p/3449351.html