首页 > 解决方案 > 为什么即使在使用减量运算符后,while 循环内的数组也会出现越界错误?

问题描述

在下面的 C++ 代码中,最后一行出现了超出范围的错误

int n;cin>>n;
int a[n];
for(int i=0;i<n;i++)
   cin>>a[i];
while(n--)
   {a[n]-a[n-1];}

应该没有问题,因为在 while 循环中, n 将首先递减,然后它将开始执行循环中的代码。

我已经在多个 IDE 上运行它并且运行良好,但是当我尝试在 codeforces 上提交解决方案时给了我一个越界错误。

标签: c++arrayswhile-loopindexoutofboundsexception

解决方案


n--n在减量之前返回。

因此,最后一次迭代n == 0意味着a[n - 1]访问元素 -1,这是由于数组访问越界而导致的未定义行为的明显情况。

改为--n将给出调整后的变量,从而“修复”代码。

顺便说一句,可变长度数组不是标准的 C++ 功能,尽管许多 C++ 编译器接受它作为从 C99 导入的扩展。


推荐阅读