(原)VS2013在Release情况下使用vector有时候会崩溃的一个可能原因
转载请注明出处:
http://www.cnblogs.com/darkknightzh/p/5016352.html
参考网址:
http://www.cnblogs.com/BryZ/archive/2011/06/21/2085865.html
http://www.cppblog.com/super-/archive/2009/06/18/88006.aspx
调试程序,在debug下没问题,release时,程序崩溃。后来发现,是vector声明的向量,打印出来size是357395012这么大。。。在push_back之后,程序直接崩溃。(以前用vector时,即便push_back结构体,也不会崩溃。这次不知道为什么,就崩溃了,不确定程序其他地方是否还有潜在问题,再调试吧。)
后来网上搜了一下,网上的说法是:
原因是Checked Iterator机制导致迭代器异常抛出,而未被catch捕获。(Checked Iterator是指具有越界检查功能的迭代器,并且会在检查到越界操作时触发运行时错误处理。)
_SECURE_SCL如果定义为0,迭代器检查(Checked Iterator)将被禁用。
事实上如果开启了迭代器检查,每次内存偏移都会调用_invalid_parameter_noinfo,导致操作更耗时,有兴趣可以在汇编中对比两者——所以,建议在编写release版本时手动关闭该宏。
vc在release时,加入了迭代子检测;
程序可以强制修改_SECURE_SCL为0,就可以解决问题了;
为了强制修改_SECURE_SCL宏,在头文件上作如下修改,之后vector声明的向量的size就是0了:

注:下面的是将define放在include的后面:

对比上面两张图,可以发现,第一张图时,未定义_SECURE_SCL宏,因而直接定义;第二张图,宏_SECURE_SCL已经定义了,因而重定义该宏。但是,对于第二张图,虽然将_SECURE_SCL宏也设置为1,但是vector声明的向量的size依旧是357395012这么大。猜测原因是,先include的,导致vector库里面,_SECURE_SCL依旧为0,因而size很大。这应该涉及到include包含文件先后顺序的问题了。
不过,不理解的是,为啥上面说的是将_SECURE_SCL设置为0,我这边设置为1解决了。。。
(原)VS2013在Release情况下使用vector有时候会崩溃的一个可能原因的更多相关文章
- 【Visual Studio】VS2013的Release模式下进行调试(转)
原文转自 http://blog.csdn.net/haizimin/article/details/50262901 在有的情况下,我们可能不能直接利用Debug模式进行程序调试,那么如何在Rele ...
- laravel项目return back()->withErrors($validator)或return back()->with('errors','原密码错误!')在前台原密码错误的情况下不能正确显示错误信息,变成报错!
被折磨的答案是 php artisan --version看一下版本,如果是5.2.26以上的,在路由处删除web中间件分组,还有问题再反馈
- mysql什么情况下会触发表锁
锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数 ...
- 在不损坏C盘的情况下为C盘扩容,适用于Win
2016年12月29日14:29:27 参考原文:http://jingyan.baidu.com/article/90808022a6c6b7fd91c80fc8.html 在不损坏磁盘的情况下给某 ...
- Sql Server优化之索引提示----我们为什么需要查询提示,Sql Server默认情况下优化策略选择的不足
环境: Sql Server2012 SP3企业版,Windows Server2008 标准版 问题由来: 最近在做DB优化的时候,发现一个存储过程有非常严重的性能问题, 由于整个SP整体逻辑是一个 ...
- 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)
场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...
- yii在哪些情况下可以加载yiilite.php?
yii权威指南上说,在开启apc缓存的情况下,可以加载yiilite.php提升性能.我有以下几点疑问: 1.开启apc缓存的情况下,引入yiilite.php能提升性能的原因是因为缓存了opcode ...
- VS2010 release编译下进行调试,“当前不会命中任何断点,还没有为文档加载”问题解决方案
在release模式下调试程序,经常出现"当前不会命中任何断点,还没有为文档加载"的问题,可尝试以下方法: 1. 属性 → 配置属性 → C/C++ → 常规 → 调试信息格式:选 ...
- 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...
随机推荐
- linux下启动和关闭网卡命令及DHCP上网
ifup.ifdown:如果在 /etc/sysconfig/network-scripts里面的ifcfg-ethx等文件存在的话,就可以通过ifdown或ifup来实现网卡的开和关,例如:ifup ...
- cocos2dx 字体描边方法介绍
转载地址:http://www.taikr.com/group/2/thread/1606 关于cocos2dx 字体描边的实现,不考虑效果和效率的话,是有三种方式: ① 利用CCLabelTTF制作 ...
- 为什么memset不能将数组元素初始化为1?
原型:extern void *memset(void *buffer, int c, int count); 功能:把buffer所指内存区域的前count个字节设置成字符c. 包含头文件:< ...
- React java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.edaixi.activity/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.edaixi.activity, PID: 3659 at java.lang.Runtime ...
- 树状数组(BIT)
i的二进制的最后一个1可以通过i&(-i)得到,时间复杂度o(logn).对于W*H的二维BIT只需要建立H个大小为x轴方向元素个数W的BIT,复杂度O(logW+logH).同样的方法可以扩 ...
- 自己动手写谷歌API翻译接口
可以看到,利用GET请求方式,带入某些参数,就会返回一个json数组,QueryString参数如下: 同样的,我们只需要传入这三个参数,就可以获得我们想要的翻译内容,公开方法,代码如下. ...
- IC封装形式COF介绍
其实这个真不太懂,没有太多接触也没有比较好的资料,只能简单的了解一下了. 什么是卷带式覆晶薄膜封装 COF(Chip on film) COF是一种 IC 封装技术,是运用软性基板电路(flexibl ...
- VS2010中使用QtOpenGL出现 unresolved external symbol __imp__glClear@4 referenced in function之类的错误
描述: 链接了QtOpenGL4.lib QtOpend4.lib的库啊,居然还是发生此错误. 原因是没有链接OpenGL32.lib这个库.所以,要添加这个lib 重新rebuild的一下,此类的错 ...
- linux svn用法
创建一个版本库.项目目录. 创建一个版本库: svnadmin create ~/SVNTestRepo 创建一个项目目录: svn mkdir file:///home/lsf/SVNTestRep ...
- Spring集成Hessian
一.概述 Spring 通过org.springframework.remoting.caucho.HessianServiceExporter将POJO中的所有public方法发布为Hessian服 ...