2013-12-18 63 views
1

我的问题如下:尽管此代码是确定赛格故障

#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

是的,你是正确的,这是因为当你把双array[128][128][128];main那么它里面是不是由您的操作系统支持在栈上分配更多的内存字节。

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

+0

我怀疑这是操作系统,而是编译器设置。可能有一个编译器(或链接器)开关允许更大的堆栈。 –