0
以下代碼使用篩選打印一些素數會在在線判斷中生成SIGSEGV錯誤。SIGSEGV在C++循環中有一個非常大的數組
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);
}
,但如果我刪除了一些語句:
for(long i=3;i<100000000;i=i+2)
{
if(arr[i]==1)
{
count++;
}
}
修改如上第二循環。它不顯示錯誤。可以幫助解釋爲什麼會發生這種情況,以及如何在第一個程序中糾正這種情況。
您是否在調試器中運行以下命令:
您可以通過使用動態數組,通常在堆中分配解決?這會告訴你什麼線路導致了seg-fault。 – 2011-12-27 17:37:12
'int arr [100000000];'在棧上創建,這是一個巨大的尺寸,你應該考慮動態分配數組,或者更好的簡單的使用'std :: vector'。 – 2011-12-27 17:41:27