You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何以下C++代码会陷入无限循环?

为什么这段C++代码会陷入无限循环?

问题代码

#include <iostream>

using namespace std;

class Buffer {
public:
    static const int BufferSize=5;
    Buffer() {
        for(this->index=0;this->index<=BufferSize;this->index+=1) {
            BufArr[this->index]=0;
            cout<<"index: "<<index<<"\n";
        }
    }
    int BufArr[BufferSize];
    int index;
};

int main() {
    Buffer b;
    return 0;
}

运行现象

运行后会无限循环打印:

0
1
2
3
4
0
1
2
3
4
...

明明循环条件是index<=BufferSize,按道理当index到5时应该退出循环,为什么会无限循环?


原因解释

这是数组越界访问引发的未定义行为,具体细节如下:

  • BufferSize为5,意味着BufArr是包含5个int元素的数组,合法索引范围是0~4。
  • 循环条件index<=BufferSize会让index=5时仍执行循环体,此时BufArr[5]属于越界访问——C++不会对数组越界做运行时检查。
  • 看Buffer类的内存布局:BufArr是第一个成员,紧随其后的就是index变量。在绝大多数编译器的实现中,这两个变量是连续存储的。所以BufArr[5]对应的内存地址,恰好就是index变量的地址。
  • 执行BufArr[5]=0时,实际上是把index的值改成了0。下一次循环判断时,index又回到0,循环便从头开始,陷入无限重复。

简言之:越界写入数组的"第6个元素",意外覆盖了循环变量index,将其重置为0,导致循环永远无法终止。


内容的提问来源于stack exchange,提问作者Alok Ranjan Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:35:58