c++栈溢出怎么解决?
答案:2 悬赏:80 手机版
解决时间 2021-02-06 14:38
- 提问者网友:wodetian
- 2021-02-05 16:49
c++栈溢出怎么解决?
最佳答案
- 五星知识达人网友:冷風如刀
- 2021-02-05 17:43
一般每个进程的栈空间是限定的。(为什么限定?去学汇编和操作系统就知道)
什么占用栈空间?
除去系统栈占用外,基本就是栈变量。(什么是栈变量?无语¥%*&……%¥%&)
简单来说上面那个a就是栈变量。
修改有两个办法:
一 改为堆变量:
int* pa = malloc(sizeof(int)*1000*1000);
然后可以将pa当数组用。(数组和指针在C里基本等同)
当然,不用了记得free pa。
二 修改系统限制
这个栈变量= 1000*1000*4 = 4M。(约等于)
如果这个函数不频繁调用,也不递归,一般还是可以接受。
可以修改操作系统对进程栈空间的大小限制,稍微调大一些。
ulimit查看系统的限制。(*nix系统命令。不是windows的)
当然方法二非常不值得推荐
什么占用栈空间?
除去系统栈占用外,基本就是栈变量。(什么是栈变量?无语¥%*&……%¥%&)
简单来说上面那个a就是栈变量。
修改有两个办法:
一 改为堆变量:
int* pa = malloc(sizeof(int)*1000*1000);
然后可以将pa当数组用。(数组和指针在C里基本等同)
当然,不用了记得free pa。
二 修改系统限制
这个栈变量= 1000*1000*4 = 4M。(约等于)
如果这个函数不频繁调用,也不递归,一般还是可以接受。
可以修改操作系统对进程栈空间的大小限制,稍微调大一些。
ulimit查看系统的限制。(*nix系统命令。不是windows的)
当然方法二非常不值得推荐
全部回答
- 1楼网友:北城痞子
- 2021-02-05 18:17
说明递归层数过多(至少上万了)
原因是写的有问题,没设置正确的退出条件;
也有可能是就是得递归那么多层,这时可以考虑将函数递归改成利用std:stack实现递归,这样能容忍的层数会多很多,只要内存够。
丛程序是快速排序来看,更有可能是算法写错了,导致递归无法终止。
原因是写的有问题,没设置正确的退出条件;
也有可能是就是得递归那么多层,这时可以考虑将函数递归改成利用std:stack
丛程序是快速排序来看,更有可能是算法写错了,导致递归无法终止。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯