這是c中的一個簡單並行程序。並行程序中的GCC分段錯誤
我使用的是Ubuntu和gcc進行編譯。
該程序將輸入進程數量,並創建並向用戶請求相同數量的數字。 然後使用每個過程來計算每個數字的階乘。
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
int factorial(int n)
{
int fact=1;
int i;
for(i=1 ; i<=n ; i++)
{
fact=fact*i;
}
return fact;
}
int main()
{
int process_id;
int num_process;
int pid;
int i;
printf("\nEnter No. of Process : ");
scanf("%d",&num_process);
int num[num_process];
for (i=1; i < num_process; i++)
{
printf("\nEnter %d Number : ",i);
scanf("%d", &num[i]);
}
for (i=0; i < num_process; i++)
{
pid=fork();
if (pid == -1)
{
perror("Error forking");
return -1;
}
else if(pid > 0)
{
waitpid(-1, NULL, 0);
}
else
{
printf("\nFactorial of %d is : %d", num[i], factorial(num[i]));
exit(0);
}
}
return 0;
}
從未聽說過分段故障,有人可以解釋它是什麼意思?
計算階乘時,不應從0開始。 – 2013-02-24 15:23:26
您從未聽說過段錯誤?很難相信,因爲Google上的第一次攻擊指向:http://en.wikipedia.org/wiki/Segmentation_fault當取消引用NULL指針或讀取/寫入未分配的內存時,通常會發生段錯誤(例如,過去的末尾數組)。 – 2013-02-24 15:26:03
也開始使用調試器。我喜歡gdb。 – axiom 2013-02-24 15:40:33