0

我有这个代码:

#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;
}

一个非常简单的:我试图越过边界,我希望捕获异常。然而,程序只是简单地因“调试断言失败!”而崩溃!在第二个增量上,为什么会这样?

该示例取自http://msdn.microsoft.com/en-us/library/aa985965(v=vs.100).aspx,我刚刚添加了宏来设置选中的迭代器。我处于调试模式,/EHsc 已打开,/MDd 也已打开

4

3 回答 3

1

你离开了最重要的部分——#include台词。

您需要将这些宏放在#include行的上方。如果您使用的是预编译头文件,则需要将它们放在预编译头文件中。

因为你问题中的代码不完整,我不知道你是否做对了。我怀疑你没有,所以我提供这个作为答案。

于 2012-10-08T18:23:10.040 回答
1

新版本的 Visual C++ 库(捆绑在 Visual Studio 2010 中)不支持从检查的迭代器中抛出异常。请参阅http://wishmesh.com/2010/04/it-seems-that-_secure_scl_throws-is-deprecated-in-visual-studio-c-2010/

于 2012-10-08T18:40:57.823 回答
0

已检查的迭代器是指在您尝试越过容器边界时将引发异常或调用 invalid_parameter 的迭代器。

您的示例代码没有移动迭代器,所以我认为抛出任何东西都是没有意义的。

于 2012-10-08T17:56:13.563 回答