Ich brauche einen Haupt-Thread erstellen neue Threads, die jeweils ein Array von Primfaktoren eines Werts an sie zurückgegeben. Wenn beispielsweise ein neuer Thread 12 übergeben wird, muss er ein Array, das 223 enthält, an den Hauptthread zurückgeben. Da mein Code momentan steht, bekomme ich immer einen Segmentierungsfehler. Ich bin mir nicht sicher, wie man Werte von einem neuen Thread zum Hauptthread zurückgibt. Gibt es Hilfe, um herauszufinden, was den Segmentierungsfehler verursacht und wie man Werte an einen Hauptthread zurückgibt?Multithread Primefactorization mit POSIX
#include <pthread.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
void *trial_division(void *n);
int main (int argc, char** argv[])
{
while(argc > 0){
pthread_t tid;
pthread_create(&tid,NULL,trial_division,argv[argc]);
pthread_join(tid,NULL);
argc--;
}
}//end main
void *trial_division(void *n)
{
printf("I'm a new thread!\n");
int value = atoi(n);
while (value%2 == 0)
{
printf("%d",2);
value = value/2;
}
for (int i = 3;i <= sqrt (value); i = i+2)
{
while (value%i == 0)
{
printf("%d",i);
value = value/i;
}
}
if (value > 2)
printf("%d",value);
printf("\n");
}//end trail_division
Die segfault wird verursacht durch argv mit argc Wert dereferenzieren. Die Array-Indizierung beginnt mit Null, dh nach dem Ersetzen von 'argv [argc] 'durch' argv [argc-1]' gibt es keinen segfault. – yanpas