我正在處理一個C程序。我想初始化一個長度爲1,000,000的數組。
它編譯時沒有任何錯誤或警告,但在執行過程中,Windows發送進程終止。
我修改了我的代碼,所以會有4個數組,每個數組有500,000個整數。它再次編譯沒有錯誤或警告,但問題仍然存在。C中的數組長度是否有限制?
我用CodeBlox(GCC編譯器,我認爲)
這裏是我的代碼:
#include <stdio.h>
#include <math.h>
// Prototypes:
int checkprime(int n);
int main(){
int m=0;
int A[500001]={2,2,0};//from k=1 to 500000
int B[500000]={0};//from k=500001 to 1000000
int C[500000]={0};//from k=1000001 to 1500000
int D[500000]={0};//from k=1500001 to 2000000
int n=3;
int k=2;
for(n=3;n<2000001;n +=2){
if(checkprime(n)){
if (k<=500000)
{A[k]=n;
k +=1;}
else if ((k>500000)&&(k<=1000000))
{B[k-500001]=n;
k +=1;}
else if ((k>1000000)&&(k<=1500000)){
C[k-1000001]=n;
k +=1;
}
else if(k>1500000){
D[k-1500001]=n;
k +=1;}
}//end of if
}//end for
int i=0;
for(i=1;i<500001;i++)
{
m=m+A[i];
}
for(i=0;i<5000001;i++)
{
m=m+B[i];
}
for(i=0;i<5000001;i++)
{
m=m+C[i];
}
for(i=0;i<5000001;i++)
{
m=m+D[i];
}
printf("answer is %d",m);
return 0;//Successful end indicator
}//end of main
int checkprime(int n){
int m=sqrt(n);
if (!(m%2))
{
m=m+1;
}
int stop=0;
int d=0;
int isprime=1;
while((m!=1)&&(stop==0)){
d=n%m;
if (d==0){
stop=1;
isprime=0;
}
m -=2;
}//end of while
return isprime;
}//end of checkprime
重新:陣列長度限制,請參見:http://stackoverflow.com/questions/216259/is-有一個最大數組長度限制在c – pb2q 2012-07-28 06:21:36
向我們顯示您的代碼。 – 2012-07-28 06:23:23
@KeithRandall不需要。 – 2012-07-28 06:24:14