이 코드가 예외를 던지는하지 반복자를 확인 :Visual Studio에서
#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는에 그래서 IS/MDD
벡터 헤더를 포함시키기 전에 이러한 매크로를 정의해야한다고 생각합니다. –
@NathanMonteleone : 그는 그 매크로를 전혀 정의하지 말아야합니다. 그가 링크 한 기사에 따르면, 그는'/ D_DEBUG/EHsc/MDd'로 컴파일해야합니다. –
소스 코드에서 매크로를 정의한 것과 같지 않습니까? –