Hier ist mein Code, ich kann den Fehler für paar Stunden nicht finden. Ich führe es auf Bash, und es gibt die korrekte Fibonacci-Ausgabe mit Segmentierungsfehler 11 am Ende der Zeile. Aber wenn ich Xcode verwende, um es auszuführen, gibt es keinen solchen Segmentierungsfehler, aber mit normalem Return 0 am Ende.Segmentierungsfehler 11 in C-Sprache Pthread-Programm
Grundsätzlich erstelle ich einen Pthread, um die Funktion zu berechnen berechnen und nachdem es fertig ist, führe ich die Anzeige im Hauptthread.
Ich schätze Ihre Zeit.
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *calculate(int n, int *arr)
{
for (int i = 0; i <= n; i++)
{
if (i == 1)
arr[i] = 1;
else if (i > 1)
arr[i] = arr[i - 1] + arr[i - 2];
}
return NULL;
}
void display(int n, const int *arr)
{
for (int i = 0; i <= n; i++)
{
printf("%d ",arr[i]);
}
}
int main(int argc, const char* argv[])
{
if (argc != 2)
{
printf("Wrong argument. You need ONE positive number as argument.");
return 1;
}
int number = atoi(argv[1]);
if (number < 0)
{
printf("Plese enter a positive integer.");
return 2;
}
else if (number == 0)
{
printf("0");
return 0;
}
int *arr = (int*)malloc((number+1) * sizeof(int));
arr[0] = 0;
pthread_attr_t attr;
pthread_t thread;
pthread_attr_init(&attr);
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
pthread_create (&thread, &attr, calculate(number, arr), NULL);
display(number, arr);
free(arr);
return 0;
}
Haben Sie versucht, Ihrem Thread vor dem Beenden beizutreten? –