在最近的作业中我必须向后输出一个数组。 数组的大小为" 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()是我们必须使用的函数。 有没有人知道为什么会发生这种情况?
答案 0 :(得分:3)
您正在获得未定义的行为。
for(size_t i=n-1; i >= 0; --i){
f(values[i]);
++rc;
}
size_t
是无符号类型,因此i >= 0
始终为真。一旦你达到0并尝试递减它,它将会回绕并且你将获得size_t
的最大值。并且您很可能在无限循环后访问无效内存(或由于无效的内存访问而导致崩溃)。