1

segfault のケースを理解できません。

int main()
{
     int val;
     pthread_t thread;
 ...........................
     pthread_join(thread,(void **) &val);  
     printf("Val=%d",val);   
 //and here sometimes come segmentation 
 //fault and other times i get correct val value

 ...........................
}

void *Do(void *)
{
    int retval=4;
...............
    pthread_exit((void *) retval);
}

私が正しければ、pthread_exit() はアドレス (値は 4) を (&val) ポインターが指す変数に格納します。これは、pthread_join() の後に val=4 であることを意味します。しかし、プログラムを何度も起動すると、正しい val 値 (つまり 4) と異なる起動でのセグメンテーション違反の両方が得られるという点です。(ところで、Do 関数でポインターと動的割り当てを使用して正しい方法で実行した場合と同じ結果)。

お願い助けて。前もって感謝します。

4

2 に答える 2