1

私のプログラムには次のコードが含まれています。

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ます(チェックスルーgdbvalgrind)。なぜそうなのか?

4

1 に答える 1

8

iこれは、ループ内で変数を再宣言するためです。ループ内の変数が使用されており、ガベージ値が含まれています。そのため、式&PThreadTable[i]が間違ったアドレスを指しているため、セグメンテーション違反が発生します。

于 2012-06-28T17:13:36.010 に答える