日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VS2013在Release情况下使用vector有时候会崩溃的一个可能原因

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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有时候会崩溃的一个可能原因的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。