pthread_create导致分段错误

pyt*_*nic 1 c linux gcc segmentation-fault

我的程序包含以下代码.

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();
Run Code Online (Sandbox Code Playgroud)

代码在调用时给出了分段错误pthread_create(通过gdb和检查valgrind).为什么这样?

Met*_*est 8

这是因为你i在循环内重新声明变量.循环中的变量正在使用,它包含垃圾值.这就是为什么表达式&PThreadTable[i]指向错误的地址并且您得到分段错误.

  • 只是抛弃它,这就是为什么你应该总是使用`-Wall`编译器选项进行编译,或者至少在进行初始代码和/或调试时.我已经抓住了一些奇怪的小东西,我想它也会抓住这个问题. (4认同)