堆栈溢出(Stack Overflow)的解决方法

堆栈溢出是程序调试中,比较麻烦的一种错误,但不外乎就是递归和变量申请大空间内存;

错误时,弹出如下图所示框框:

其中,0x7c934ffd的值依具体情况而不同。OxC00000FD是错误标号;

 

1. 局部数组变量空间太大,如下:

int main(int argc, char* argv[])
{
    char stack_overflow[1024*1024*5];
    stack_overflow[0] = 1;
    return 0;
}

解决这类问题的办法有两个,一是增大栈空间(后文中有详细描述),二是改用动态分配,使用堆(heap)而不是栈(stack)。  

1.  打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。

2.  单击“链接器”文件夹。

3.  单击“系统”属性页。

4.  修改下列任一属性:

·         堆栈提交大小

·         堆栈保留大小

 

(或则 在命令行输入 附加项 /STACK:大小)

2. 函数出现无限递归调用,如下:

void infinite_loop()
{
    infinite_loop();
}

int main(int argc, char* argv[])
{
    infinite_loop();
    return 0;
}

实际应用中,往往由于粗心大意或者函数间的相互调用而造成了这样的结果。解决的办法当然是找到使用递归的地方,并消除 BUG  
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值