Visual Studio C++出现奇怪的界限错误

Ant*_*ony 0 c++ loops visual-studio-2012

我在Visual Studio中为一个类项目工作.因为我不能再说出我是否疯了,这段代码会运行并立即导致'index out of bounds'错误.在我的脑海里不可能发生这种情况.

int _tmain(int argc, _TCHAR* argv[]){
    vector<int> points;
    for(int i = 0; i < points.size() - 1; i++){
        points[i+1] = 2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

向量中没有值,因此大小返回0,然后我们检查i <-1.是0 <-1?不,不是这样,循环永远不会运行,程序应该返回.

我得到的确切警告是这样的:

Windows错误

我正在编译调试模式所以我想我的问题是,首先,我错过了什么?如果没有,这是一种奇怪的Visual Studio Debug功能吗?

das*_*ght 6

这是导致问题的表达式:

i < points.size() - 1
Run Code Online (Sandbox Code Playgroud)

当你从无1符号值零(points.size()size_t,无符号)中减去时,你得到一个非常大的数字.切换到此条件以解决问题:

i + 1 < points.size()
Run Code Online (Sandbox Code Playgroud)

它在数学上是相同的,但它不会产生数字溢出,除非i它的最大值为int.