int main() { int a[1000][1000]; return 0; } 就这样一段代码它就报stack overflow的错误 123.exe 中的 0x00121637 处最可能的异常: 0xC00000FD: Stack overflow 123.exe 中的 0x00121637 处有未经处理的异常: 0xC00000FD: Stack overflow
解释:
一般每个进程的栈空间是限定的。(为什么限定?去学汇编和操作系统就知道) 一般为1M或2M。 什么占用栈空间? 除去系统栈占用外,基本就是栈变量。(什么是栈变量?无语¥%*&……%¥%&) 简单来说上面那个a就是栈变量。 修改有两个办法: 一 改为堆变量: int* pa = malloc(sizeof(int)*1000*1000); 然后可以将pa当数组用。(数组和指针在C里基本等同) 当然,不用了记得free pa。 二 修改系统限制 这个栈变量= 1000*1000*4 = 4M。(约等于) 如果这个函数不频繁调用,也不递归,一般还是可以接受。 可以修改操作系统对进程栈空间的大小限制,稍微调大一些。 ulimit查看系统的限制。(*nix系统命令。不是windows的) 当然方法二非常不值得推荐