C编程,为什么这个大型数组声明会产生分段错误?

aoe*_*oeu 5 c arrays integer

此代码在数组声明期间产生分段错误.我很困惑为什么会这样.我故意选择2000000000作为值,因为它低于2 ^ 31并且可以适合整数变量.

int main()
{

    int  nums_size = 2000000000;

    int nums[nums_size];

    int i;
    for(i = 0; i < nums_size; i++) {
        nums[i] = i;
    }


    return 0;

}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 21

嗯,首先,这是20亿个整数.如果您的平台上有32位地址空间且int大小为4个字节(通常是32位平台),则无法存储那么多整数.

即使如此,您在堆栈上只有很多可用空间,这是自动变量所在的位置.

如果你需要一个非常大的数组,你应该使用dyncamically分配它malloc()(如果你这样做,一定要free()在你完成它时使用它!).