声明大数组后的Seg Fault

时间:2013-12-18 19:28:46

标签: c memory-management segmentation-fault

我的问题如下:

此代码返回seg错误(核心转储):

#include <stdio.h>

int main(void) {
  double array[128][128][128];

  printf("done");

  return 1;
}

虽然这段代码还可以:

#include <stdio.h>
double array[128][128][128];

int main(void) {

  printf("done");

  return 1;
}

当然是内存问题,因为如果我把主要功能放在声明中:

float array[127][128][128];

代码效果很好。另一方面,如果我使用“malloc”在主函数内部分配多维数据集,代码也可以正常工作。 我无法理解其原因。有一个简单的解释?

由于

1 个答案:

答案 0 :(得分:1)

是的,你是对的,这是因为当你在array[128][128][128];内放置双main时,它会在你的操作系统不支持的堆栈上分配更多的内存字节。

但是当它在main之外分配时,它会从应用程序池外部获取内存,因此您不会看到任何错误。