亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

矢量越界而不給出錯誤

矢量越界而不給出錯誤

C++
翻閱古今 2019-11-04 09:56:57
我有一個std::vector。我檢查它的大小是6,但是當我嘗試訪問vec[6]它是否會給出錯誤時,我沒有看到任何錯誤,但是得到了一些數字。它不應該給出錯誤嗎?編輯:類似:struct Element{    std::vector<double> face;};int main(){    Element elm;    .... // insert 6 elements into elm.face    std::cout << elm.face.size() << std::endl; // answer is 6    std::cout << elm.face[6] << std::endl; // answer is some number}
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

如kgraney的回答所述,這是不確定的行為。但是,大多數c ++庫在某些情況下具有中止或引發異常的功能。通常通過設置或取消設置特定的編譯器宏來控制。


我已經對相關文檔進行了概述:


gnu libstdc ++

調試模式 -有關libstdc ++調試的常規信息

_GLIBCXX_DEBUG

帶有-fconcepts的_GLIBCXX_CONCEPT_CHECKS-啟用c ++概念

langlibcxx

_LIBCPP_DEBUG_LEVEL = 1

促進

BOOST_DISABLE_ASSERTS-禁用Boost庫中的斷言

微軟

選中的迭代器

_ITERATOR_DEBUG_LEVEL-設置迭代器調試級別

CRT中的安全功能

_CRT_SECURE_NO_WARNINGS:禁用棄用警告

_SCL_SECURE_NO_WARNINGS-安全性較低(根據Microsoft),但更符合標準:


_SECURE_SCL-設置迭代器調試級別的舊方法


_HAS_ITERATOR_DEBUGGING-已棄用的宏

請注意,默認情況下,gnu和clang禁用檢查,而Microsoft默認情況下將其啟用。如果您不知道這一點,您的代碼在Microsoft系統上的調試模式下運行可能會明顯變慢。


查看完整回答
反對 回復 2019-11-04
?
森欄

TA貢獻1810條經驗 獲得超5個贊

這是未定義的行為。未定義的行為并不一定意味著您會得到一個錯誤:您可能會錯,但您可能會得到一些沒有太大意義的結果。


查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 392 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號