簡體   English   中英

Visual Studio檢查迭代器而不是拋出異常

[英]Visual Studio checked iterator not throwing exceptions

我有這個代碼:

#ifdef _DEBUG
#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1
#else
#define _SECURE_SCL 0
#define _SECURE_SCL_THROWS 0
#endif

#include <iostream>
#include <vector>


using namespace std;




int main()
{
    vector <int> v1;
    v1.push_back(33);

    vector <int>::iterator it1 = v1.begin();

    try 
    {
        it1++;

        it1++;
    }
    catch (...) 
    {
        cout << "vector is empty!!" << endl;
    }

    return 0;
}

一個非常簡單的問題:我試圖超越邊界,我想要捕獲異常。 但是程序只是因為“Debug Assertion Failed!”而崩潰了。 在第二個增量,為什么?

該示例來自http://msdn.microsoft.com/en-us/library/aa985965(v=vs.100).aspx ,我剛剛添加了宏來設置已檢查的迭代器。 我處於調試模式,/ EHsc打開,因此/ MDd

你從問題中留下了最重要的部分 - #include行。

您需要將這些宏放在#include行之上。 如果您正在使用預編譯頭,則需要將它們放在預編譯頭中。

因為你問題中的代碼不完整,我不知道你是否做得對。 我懷疑你沒有,所以我提供這個答案。

新版本的Visual C ++庫(捆綁在Visual Studio 2010中)不支持從已檢查的迭代器中拋出異常。 http://wishmesh.com/2010/04/it-seems-that-_secure_scl_throws-is-deprecated-in-visual-studio-c-2010/

已檢查的迭代器是指如果您嘗試移過容器邊界,將拋出異常或調用invalid_parameter的迭代器。

你的示例代碼沒有移動迭代器,所以我認為不會拋出任何東西是有道理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM