我的程序包含以下代码。
pthread_t PThreadTable[32];
for (i=1; i<P; i++) // Checked with P = 4
{
long i, Error;
printf( "pthread_create %d!\n", i );
Error = pthread_create(&PThreadTable[i], NULL,
(void * (*)(void *))(SlaveStart), NULL);
if (Error != 0)
{
printf("Error in pthread_create().\n");
exit(-1);
}
}
SlaveStart();
代码在调用pthread_create
时提供了细分错误(通过gdb
和valgrind
检查)。为什么这样?
答案 0 :(得分:8)
因为你在循环中重新声明了变量i
。循环中的变量正在使用,它包含垃圾值。这就是为什么表达式&PThreadTable[i]
指向错误的地址并且您得到了分段错误。