这是怎么发生的:一个C OpenMP分段错误

这是怎么发生的:一个C OpenMP分段错误,c,linux,openmp,C,Linux,Openmp,2016年,我编写了一个C OpenMP Monte Carlo Pi软件应用程序,并在以前的Ubuntu版本上运行了它。在另一个计算机信息系统上,它起作用了。我有另一个Linux设备,Raspberry Pi 4,我一直在寻找它的运行。我编译了它,也就是说,我运行了指令 gcc-fopenmp Monte\u Carlo\u OpenMP.c-o MC\u OMP 所以我下一步就是提交我的下一个指令就是 /MC\u OMP 但这一次,我收到了一个分段错误。以下是我的代码: #包括 #包括

2016年,我编写了一个C OpenMP Monte Carlo Pi软件应用程序,并在以前的Ubuntu版本上运行了它。在另一个计算机信息系统上,它起作用了。我有另一个Linux设备,Raspberry Pi 4,我一直在寻找它的运行。我编译了它,也就是说,我运行了指令

gcc-fopenmp Monte\u Carlo\u OpenMP.c-o MC\u OMP
所以我下一步就是提交我的下一个指令就是

/MC\u OMP
但这一次,我收到了一个分段错误。以下是我的代码:

#包括
#包括
#包括
int main(int argc,char*argv[])
{
圆圈中的整数;
int i=0;
长整型线程数;
无符号整数随机种子[4];
双x,y;
双倍距离_平方;
双pi_估计;
线程计数=strtol(argv[1],NULL,10);
#pragma-omp并行
{
随机种子[0]=1;
randSeed[1]=1;
randSeed[2]=1;
randSeed[3]=omp_get_thread_num();
圆圈中的数字=0;
printf(“来自线程%d\n的Hello”,randSeed[3]);
srandom(randSeed[3]);
#pragma omp用于第一个专用(随机种子)专用(x,y)缩减(+:圆圈中的数字)
对于(i=0;iif(distance_squared)您可以访问
argv[1]
,但不传递任何命令行参数。您可以给出两个命令行参数示例吗?您编写了程序,因此您应该是给出有效命令行参数示例的人:)顺便说一句,
distance_squared
应该是
private
并且您以不安全的方式访问PRNG。自从我做了这项工作以来,已经大约4年了。我相信:当时,我也有同样的问题,argv[]部分,但我运行了它,它成功了。我可以稍后修复隐私,但最大的问题是分段错误。你是说4年前,你运行“/MC_OMP”时没有任何参数,它没有崩溃吗?因为正如@PaulHankin所说,在你的示例中,你没有传递任何参数。所以strtol()将0作为第一个参数传递。这会使strtol()崩溃。此外,线程计数是一个长整型。因此,您应该使用strtoll()。您可以访问
argv[1]
但不要传递任何命令行参数。你能给出几个命令行参数示例吗?你编写了程序,因此你应该是给出有效命令行参数示例的人:)顺便说一下,
距离平方
应该是
私有
,并且你以不安全的方式访问PRNG。因为我做了这项工作,大约有4年了。我相信:当时,我也遇到了同样的问题,argv[]部分,但我运行了它,它成功了。我可以稍后修复隐私,但最大的问题是分割错误。你是说4年前,你运行了“/MC_OMP”没有任何参数,它没有崩溃?因为正如@PaulHankin所述,在您的示例中,您没有传递任何参数。因此strtol()被传递为0作为第一个参数。这使得strtol()崩溃。此外,线程计数是一个长整型。因此,您应该使用strtoll()。