這是我的代碼,幾個小時後我找不到這個錯誤。我在bash上運行它,並在行尾提供了正確的斐波那契輸出和分段錯誤11。但是當我使用Xcode來運行它時,沒有這樣的分段錯誤,但是在最後的正常返回0。C語言pthread程序中的段錯誤11
基本上我創建一個pthread來運行函數calculate,並且在完成後,我在主線程中運行顯示。
我很感激你的時間。
#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;
}
您是否嘗試在退出前加入您的線程? –