gpt4 book ai didi

c++ - Visual Studio C++ 的奇怪边界错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:38:10 25 4
gpt4 key购买 nike

我在 Visual Studio 中为一个类(class)项目工作。由于我无法再判断我是否发疯了,所以这段代码运行并立即导致“索引越界”错误。在我看来,这是不可能发生的事情。

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

vector 中没有值,所以大小返回为 0,然后我们检查 i < -1。 0 < -1 吗?不,不是这样循环永远不会运行,程序应该返回。

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

Windows error

我正在为 Debug模式编译,所以我想我的问题是,首先,我是否遗漏了什么?如果不是,这是某种奇怪的 Visual Studio 调试功能吗?

最佳答案

这是导致问题的表达式:

i < points.size() - 1

当您从零的无符号值中减去 1(points.size()size_t,它是无符号的),您会得到非常多。切换到此条件以解决问题:

i + 1 < points.size()

它在数学上是相同的,但它不会产生数字溢出,除非 iint 的最大值。

关于c++ - Visual Studio C++ 的奇怪边界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28439215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com