c - C语言中数组长度有限制吗?

标签 c

我正在用 C 编写一个程序。我想初始化一个长度为 1,000,000 的数组
它编译时没有任何错误或警告,但在执行过程中,Windows 发送进程终止。
我修改了代码,因此将有 4 个数组,每个数组有 500,000 个整数。它再次编译,没有错误或警告,但问题仍然存在。

我使用 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

最佳答案

使用 ulimit 命令控制最大堆栈大小的限制。编译器可以(或不)将限制设置得更小,但不能大于该值。
要查看当前限制(以千字节为单位):

ulimit -s

要删除限制:

ulimit -s unlimited

关于c - C语言中数组长度有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11698811/

相关文章:

c - 我想控制文件指针位置

c - 声明复杂 C 结构化常量数据的策略?

c - IP header 版本 5?

c++ - 在编译代码中包含一个大文本变量是个好主意吗?

c - 如何从指针获取字符串值

c - strcat 导致字符串变空

c - ARM 程序集 : can’t find a register in class ‘GENERAL_REGS’ while reloading ‘asm’

c - 如何以编程方式在正在运行的应用程序中查找符号

c - 如何为一个月中的几天提供后缀?

C 指针值混合