c语言数组申请

char tmp[1567520]; 这样申请数组,运行程序弹出栈溢出的错误,请问溢出的原因是什么呢?
我的系统是win7 32位 4G内存 i3 处理器,谢谢啦

局部非静态的数组,空间在程序的栈上分配,不同平台的栈大小不同:SunOS/Solaris是8M,Linux是10M,Windows是1M,AIX是64M,都是可以调整的。

C99所谓的动态数组,其实分配在栈上,对那些Windows之外的平台,栈尺寸都比较大,所以不觉得有什麽,一般足够,但微软并不认为这是好主意,与其调整栈尺寸,不如在堆上分配更彻底(想象一下运行时接收了不合理的数组尺寸将有什麽结果就知道了,那已经在程序可控范围之外,超越了C是编译型语言的性质,事实上为了防这种错误,迫使程序员为此要写更多的即时检测代码),所以它不接纳这种标准(VC系列都不支持动态数组)。一般的建议,大数组,在堆上分配。

一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;
在windows平台下,栈的大小的信息是包含在可执行文件中的。
它可以在Visual C++的编译过程中设置,但是在gcc中是不可行的。
也可以用Microsoft提供的一个叫作:“editbin.exe”程序来直接修改可执行文件的栈的大小。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-16
这个和你的系统处理器没有关系,这样申请一定会溢出,如果你想用很多数的话你可以用new动态申请数组
第2个回答  2014-01-16
溢出是因为不允许你在栈里面放这么大的数组,因为栈的长度是有限的,建议你在堆里开这么大的数组,
char * tmp = (char *)malloc( 1567520 * sizeof(char) );
相似回答
大家正在搜