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?不,不是这样,循环永远不会运行,程序应该返回.
我得到的确切警告是这样的:

我正在编译调试模式所以我想我的问题是,首先,我错过了什么?如果没有,这是一种奇怪的Visual Studio Debug功能吗?
这是导致问题的表达式:
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.