This question already has answers here:
Getting a stack overflow exception when declaring a large array
(8个答案)
7年前关闭。
在我的C程序中,当我尝试分配此数组值时:
我收到段错误。但是当我使用时:
有用!!这些索引值是否有限制?
(8个答案)
7年前关闭。
在我的C程序中,当我尝试分配此数组值时:
double sample[200000][2];
我收到段错误。但是当我使用时:
double sample[20000][2]
有用!!这些索引值是否有限制?
最佳答案
似乎您尝试为200,000 x 2 = 400,000
double值保留空间,并且每个double
均为8个字节,因此您尝试保留 3.2 MB的左右。
即使您的计算机可能具有几Gig的内存,每个进程和每个线程的堆栈空间还是有限的,并且很可能限制为1或2兆字节。因此,您无法分配3兆,然后崩溃。
要解决此问题,您想使用 malloc
更改为动态内存。
这样一来,您就可以从堆空间进行分配,而堆空间比堆栈空间要丰富得多。
要使用malloc:
double (*sample) [200000];
s = malloc(sizeof(*sample) * 2);
sample[0][0] = 0.0;
sample[1][199999] = 9.9;
关于c - 尝试声明大数组时出现段错误和核心转储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19778722/
10-10 21:54