我有一个信号11;即 segfault 。我知道它发生的位置(请参见代码),但不知道如何纠正它。
int *totalThreadNumProduced; //array
int *totalThreadNumConsumed; //array
int *tempStats; //array
for(int i=0; i < global_args.numProducers; i++)
{
tempStats = (int*) pthread_join( tidP[i], NULL );
simulationStats.totalThreadNumProduced[i] = tempStats[0]; //where the segmentation fault 11 is
simulationStats.numTimesBufferFull += tempStats[1];
}
答案 0 :(得分:0)
tempStats = (int*) pthread_join( tidP[i], NULL );
tempStats
是一个整数数组,从以下几行判断:
simulationStats.totalThreadNumProduced[i] = tempStats[0];
该段错误是由于未为totalThreadNumProduced
或tempStats
分配内存。
此外,您对pthread_join
的用法可能不正确;它只是返回呼叫是否成功。如果要返回已完成的线程函数的返回值,请考虑使用pthread_join
的第二个 status 参数,如显示here所示。