向后输出数组时的尴尬行为

时间:2015-06-10 21:43:14

标签: c++11

在最近的作业中我必须向后输出一个数组。 数组的大小为" n"。这是工作代码:

for(size_t i=n; i-- > 0;){
   f(values[i]);
   ++rc;
}

当我尝试使用此代码时:

for(size_t i=n-1; i >= 0; --i){
   f(values[i]);
   ++rc;
}

第二个代码总是产生随机值,很可能是因为它指的是未初始化的内存。但是不应该这样做,因为我尝试了一些简单的示例代码 char-Array和它一起工作。 f()是我们必须使用的函数。 有没有人知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

您正在获得未定义的行为。

for(size_t i=n-1; i >= 0; --i){
   f(values[i]);
   ++rc;
}

size_t是无符号类型,因此i >= 0始终为真。一旦你达到0并尝试递减它,它将会回绕并且你将获得size_t的最大值。并且您很可能在无限循环后访问无效内存(或由于无效的内存访问而导致崩溃)。

相关问题