c语言中的分段错误数组

c语言中的分段错误数组,c,arrays,C,Arrays,我想写一个程序,在其中我想初始化大小为987654321的整数数组,只存储1和0的值, 这是我的节目 #include <stdio.h> #include <stdlib.h> int main(){ int x,y,z; int limit = 987654321; int arr[limit]; for (x = 0;x < limit;x++){ printf("%d \n",arr[x]); }

我想写一个程序,在其中我想初始化大小为987654321的整数数组,只存储1和0的值, 这是我的节目

#include <stdio.h>
#include <stdlib.h>

int main(){
    int x,y,z;
    int limit = 987654321;
    int arr[limit];
    for (x = 0;x < limit;x++){
        printf("%d \n",arr[x]);
    }
    return 0;
}
#包括
#包括
int main(){
int x,y,z;
整数极限=987654321;
int arr[限值];
对于(x=0;x

但它给出了分段错误

987654321对于局部变量来说肯定太大了

如果需要该大小的动态大小的数组,则需要使用
malloc
如下:

int limit = 987654321;
int *arr = malloc(limit * sizeof(*arr));
if (arr == NULL)
{ 
  ... display error message and quit
}
...
free(arr); // free it once you're dont with the array

顺便说一句,假设平台上的
int
大小为4,那么您的阵列使用大约4GB的内存吗?

因为您只想存储1和0的值,而这些值只需要一位,所以可以使用位阵列而不是整数阵列

int
的大小通常为4字节(32位),因此您可以将所需的内存减少32倍


因此,您只需要大约128MB的内存,而不是大约4GB的内存。有关如何实现位数组的资源可以在线找到。一个这样的实现是。

初始内容是什么?它对于堆栈来说可能太大了,除了它没有初始化之外。这是超过3GB的内存。许多计算机甚至没有那么多程序可用。局部变量,包括数组,通常存储在进程堆栈中。堆栈是一个有限的资源,在Linux上通常为8MB,但在Windows上只有一个MiB。现在如果
sizeof(int)==4
(这是常见的),那么您将尝试在非常有限和小的堆栈上创建一个超过3 GB的数组。还要注意,如果未初始化局部变量,将有一个不确定(而且似乎是随机的)值。我当然是C语言的新手,不知道内存管理,如果你愿意的话,给我推荐一些教程或资源can@RK互联网上有很多关于这方面的资源。谷歌搜索“C内存变量”或类似的东西应该会有所帮助。任何好的C语言教科书都应该涵盖这一点。