这是c。
中的简单并行程序我正在使用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 :(得分:2)
此:
for ( i=1; i <= num_process; i++ )
{
printf("\nEnter %d Number : ",i);
scanf("%d", num[num_process]);
}
有问题。 num
的有效索引为0到num_process - 1.将循环更改为:
for ( i=0; i < num_process; i++ )
答案 1 :(得分:2)
在factorial
功能中,fact
未初始化。还
scanf("%d", num[num_process]);
应该是
scanf("%d", &num[num_process]);
答案 2 :(得分:1)
可以读取分段错误的说明here。
这里有一个错误:
scanf("%d", num[num_process]);
因为你从1算起 - 数组从零开始
此行for ( i=0; i <= num_process; i++ )
会为您提供太多流程。
ALSO fork
创建另一个进程 - 因此程序不是并行的 - 您需要使用线程。请谷歌吧。