程序退出异常_DebugHeapDelete和std::numpunct

  前几天程序新加一个功能之后,其中用到了boost的lexical_cast<float>,发现在关闭命令行窗口的时候,程序报错,是程序退出清理时候报的错误。

  一开始以为是程序新增的功能有问题,发现去除新功能之后,随便在一个函数中使用lexical_cast<float>,程序在退出的时候都会报错。

  所以怀疑是自己程序功能异常,包括可能的堆栈异常,针对lexical_cast<float>部分的数据内存都进行了检查,都没有问题。而且将lexical_cast<float>换成atof之后,程序关闭退出也是正常的。

  后来开始google相关的内容,发现应该是vs2012在Debug模式下,将new和free都替换成了自己重新定义的函数,导致lexical_cast<float>中使用的std::numpunct在创建的时候使用的是new,在释放的时候使用的是free,所以出现程序退出时函数堆栈异常。

  相关的链接https://code.google.com/p/chromium/issues/detail?id=107567,这个是针对std::numpunct释放时堆栈异常问题的讨论

  https://connect.microsoft.com/VisualStudio/feedback/details/502037/crash-in-vc100-crt-on-application-exit-debugheapdelete是关于vs2010程序退出堆栈异常bug的讨论。

  

  幸运的是,这个问题在centOS的gcc环境下是不存在这个问题的,程序退出时使用valgrind监控,并没有任何的错误报告。

  不过有点让我疑惑的是,如果只建立一个简单的项目其中直接使用lexical_cast<float>,在程序退出时是没有报错的,其中可能还有我目前没有找到的原因所在。

转载于:https://www.cnblogs.com/chobits/p/3986431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值