C ++如何解决这段代码中的分段错误11

时间:2018-11-22 01:55:59

标签: c++

我有一个信号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];

}

1 个答案:

答案 0 :(得分:0)

tempStats = (int*) pthread_join( tidP[i], NULL );

tempStats是一个整数数组,从以下几行判断:

simulationStats.totalThreadNumProduced[i] = tempStats[0];

该段错误是由于未为totalThreadNumProducedtempStats分配内存。

此外,您对pthread_join的用法可能不正确;它只是返回呼叫是否成功。如果要返回已完成的线程函数的返回值,请考虑使用pthread_join的第二个 status 参数,如显示here所示。