c++栈溢出怎么解决?
发布网友
发布时间:2022-05-23 16:43
我来回答
共2个回答
热心网友
时间:2023-10-29 20:48
一般每个进程的栈空间是限定的。(为什么限定?去学汇编和操作系统就知道)
什么占用栈空间?
除去系统栈占用外,基本就是栈变量。(什么是栈变量?无语¥%*&……%¥%&)
简单来说上面那个a就是栈变量。
修改有两个办法:
一 改为堆变量:
int* pa = malloc(sizeof(int)*1000*1000);
然后可以将pa当数组用。(数组和指针在C里基本等同)
当然,不用了记得free pa。
二 修改系统*
这个栈变量= 1000*1000*4 = 4M。(约等于)
如果这个函数不频繁调用,也不递归,一般还是可以接受。
可以修改操作系统对进程栈空间的大小*,稍微调大一些。
ulimit查看系统的*。(*nix系统命令。不是windows的)
当然方法二非常不值得推荐
热心网友
时间:2023-10-29 20:48
说明递归层数过多(至少上万了)
原因是写的有问题,没设置正确的退出条件;
也有可能是就是得递归那么多层,这时可以考虑将函数递归改成利用std:stack<T>实现递归,这样能容忍的层数会多很多,只要内存够。
丛程序是快速排序来看,更有可能是算法写错了,导致递归无法终止。