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 関数でポインターと動的割り当てを使用して正しい方法で実行した場合と同じ結果)。
お願い助けて。前もって感謝します。