如果声明了一个大变量,为什么C程序会崩溃?

Mar*_*oft 2 c windows msvcrt

我在Microsoft Visual Studio Express 2012中编译了以下C程序:

int main() {
   int a[300000];
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这与msvcr110d.dll中的堆栈溢出崩溃!__ crtFlsGetValue().

如果我将数组大小从300,000更改为200,000它可以正常工作(因为这个简单的程序可以说是"工作",因为它没有做任何事情).

我在Windows 7上运行,并且还在Cygwin下使用gcc尝试了这个并且它产生了相同的行为(在这种情况下是一个seg错误).

有没有搞错?

Ker*_* SB 5

C中自动对象使用的空间大小存在特定于平台的限制("堆栈大小").大于该大小的对象(在嵌入式平台上可能是几千字节,在台式机上可能是几兆字节)不能被声明为自动对象.使它们变为静态或动态.

类似地,函数调用的深度存在限制,特别是在递归方面.

检查编译器和/或平台文档,以获取有关实际大小的详细信息,以及如何更改它的详细信息.(例如在Linux上退房ulimit.)