c++ - 为什么即使在使用减量运算符后,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 上提交解决方案时给了我一个越界错误。
解决方案
n--
n
在减量之前返回。
因此,最后一次迭代n == 0
意味着a[n - 1]
访问元素 -1,这是由于数组访问越界而导致的未定义行为的明显情况。
改为--n
将给出调整后的变量,从而“修复”代码。
顺便说一句,可变长度数组不是标准的 C++ 功能,尽管许多 C++ 编译器接受它作为从 C99 导入的扩展。
推荐阅读
- dataweave - 使用 Dataweave 将键和值数组压缩到一个对象中
- kubernetes - Error in image_pull_secrets for private repository Airflow deployed in Kubernetes
- python - Get differences of two list that contain different object types using python
- r - Can't query VIEW in BigQuery with dbplyr
- javascript - Determine inner browser y-position in javascript
- python - Merging two dataframes with different encoding?
- parsing - Using superpower to parse simple block oriented data structures
- powershell - Powershell: view remote computer current user certificate
- python - Why can a parent send data only once in a bidirectional channel?
- c++ - How to maintaining relative order of non-zero elements during array sorting?