Ich bin mir nicht sicher, wie Sie diesen Fehler debuggen, da es durch eine Menge Dinge verursacht werden kann. Was ich tun konnte, ist, Teile des Programms zu kommentieren und wiederholt zu kompilieren, um zu verfolgen, welcher Teil des Programms den Fehler erzeugte, und ich denke, dieser Teil erzeugt den Fehler:Segmentierungsfehler (Core Dumped) Fehler beim Erstellen von Thread
Hier möchte ich einen Thread erstellen :
int j = 0; //not the actual value, just showing that j is of type int
pthread_create(&thread_id, NULL, strikeMultiples, (void*)j);
Vielleicht könnte es auch durch die strikeMultiples Funktion verursacht werden, die aufgerufen wird, wenn der Thread erstellt wird:
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;
}
Unter der Annahme, 'J' ist 'int', ich bin nicht vorbei ein' int * 'auf' pthread_create', wodurch der Aufbau von 'primej' und anschließenden dereferenzieren im Thread proc ist falsch. 'int j = (int) prime;' ist näher an der Realität, aber immer noch nicht "korrekt". Um es richtig zu machen, sollten sowohl 'j' inbound als auch' j' im proc 'intptr_t' oder' uintptr_t' sein, und das 'free' sollte unabhängig davon entfernt werden. Das heißt, es ist alles Spekulation, da wir nicht wissen, welcher Typ "j" auf dem ersten Snippet ist und woher es kommt. – WhozCraig