このエラーはデバッグの方法がわかりません。私ができることは、プログラムの一部をコメントアウトし、プログラムのどの部分がエラーを生成したかを追跡するために繰り返しコンパイルすることです。この部分はエラーを生成します:スレッドを作成する際にセグメンテーションフォルト(コアダンプ)エラーが発生する
スレッドを作成します。 :
int j = 0; //not the actual value, just showing that j is of type int
pthread_create(&thread_id, NULL, strikeMultiples, (void*)j);
、それはまた、スレッドが作成されたときに呼び出されるstrikeMultiples機能によって引き起こされる可能性が多分:
static void* strikeMultiples(void* prime) {
int * primej = (int *) prime;
int j = *primej;
free (prime);
int k;
for (k = 2; j * k <= NROF_SIEVE; k++) {
BIT_CLEAR(buffer[(j * k)/64], (j * k)%64);
}
return NULL;
}
は、これスレッドPROCで' primej'とその後の間接参照の蓄積が間違っています。 'int j =(int)prime;'は現実に近いですが、まだ正しいとは限りません。正しく実行するためには、procの 'j' inboundと' j'は 'intptr_t'または' uintptr_t'でなければなりません。 'free'は関係なく削除されるべきです。それは、すべての推測です。私たちは、どのようなタイプの 'j'が最初のスニペットにあるのか、それがどこから来るのか分かりません。 – WhozCraig