以下使用筛子打印一些质数的代码会在在线判断中生成SIGSEGV错误.
int main()
{
long count=1;
int arr[100000000];
printf("2\n");
for(long i=3;i<100000000;i=i+2)
{
arr[i]=1;
}
for(long i=3;i<100000000;i=i+2)
{
if(arr[i]==1)
{
count++;
if(count%100==1)printf("%ld\n",i);
for(long j=2;i*j<100000000;j++)
arr[i*j]=0;
}
}
//scanf("%ld",&count);
}
Run Code Online (Sandbox Code Playgroud)
但如果我删除一些陈述:
for(long i=3;i<100000000;i=i+2)
{
if(arr[i]==1)
{
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
如上修改第二个循环.它没有显示错误.可以帮助解决为什么会发生这种情况以及如何在第一个程序中纠正这个问题.