【发布时间】:2013-01-16 09:56:38
【问题描述】:
在下面的这段代码中,我尝试访问数组的第 '-1' 个元素,但没有收到任何运行时错误。
#include <stdio.h>
int A[10] = {0};
int main(){
A[-1] += 12;
printf("%d",A[-1]);
return 0;
}
当我运行代码时,它会输出 12,这意味着它将 12 加到不存在的 A[-1] 上。直到今天,每当我尝试访问越界元素时,都会遇到运行时错误。我以前从未在简单的代码上尝试过。
谁能解释我的代码为什么能成功运行?
我在我的电脑和ideone 上运行它,在这两种情况下它都运行成功。
【问题讨论】:
-
未定义的行为。如果
A不是第一个元素的指针,你可以,但这更像是负索引而不是越界。 -
我也尝试访问A[11],运行成功。
-
@A.06:是的。 “未定义的行为”包括“它运行成功”。未定义的行为还包括“可怕的崩溃”和“独角兽从你的电脑屏幕上飞出”。它字面意思意味着你无法以任何可靠性来推理它的行为,这就是为什么 UB 正是你不想想要做的事情。
标签: c++ c arrays runtime-error indexoutofboundsexception