C++/CLI Stack Overflow Error

同事碰到一个stack overflow的错误。通常这有2中常见的原因:

1. infinit recursion

2. large local object(structure, array)

 

第一种是逻辑错误,一般死循环都是边界条件缺失或者不完备;

第二种,解决方案是在heap上而不是stack上分配。

 

不过我同事的问题是repeatly exception导致的stack overflow。

当Double.MaxValue乘以一个正数之后,乘法会溢出导致float point overflow exception,之后exception不断抛出,导致stack overfl。

一个帖子也提到类似情况。

"when the program runs into managed code, if you use Double.MaxValue or Doulble.MinValue in your manage code, you will get floating point overflow exception, and the exception will be thrown repeatly, then you got stack overflow.

A easy workaround is: mask all floating point exception before calling .net functions"

 

如果这些都不是,那可能就是stack size手动设置的太小(在project property的link属性中),而且调用的太深了。

 

要引起注意的是,在VC中,碰到stack overflow的exception时,通常Access violation exception也跟着来。

详情可以阅读 http://support.microsoft.com/kb/315937 (How to trap stack overflow in a Visual C++ application)

 

总结一下:

stack overflow有2常见原因;此外,其他exception的repeat会导致它,它也会导致access violation exception


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值