This question already has answers here:
Getting a stack overflow exception when declaring a large array

(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