例如:
array[2]={1,2};
myInt=5;
if (array[myInt-6]==2)
cout << true << endl;
else
cout << false << endl;
if 语句中数组中的引用值明显越界。当我编译并运行它时,我得到了错误的输出,这是有道理的,因为条件不正确,但我想知道为什么没有输出错误。
例如:
array[2]={1,2};
myInt=5;
if (array[myInt-6]==2)
cout << true << endl;
else
cout << false << endl;
if 语句中数组中的引用值明显越界。当我编译并运行它时,我得到了错误的输出,这是有道理的,因为条件不正确,但我想知道为什么没有输出错误。
因为未定义的行为是未定义的。任何事情都可能发生,包括看起来有效。
编译器和运行时都不需要诊断。您必须自己处理边界检查。
C++ 不是内存安全语言,因此避免此类问题是您的工作,而不是编译器或运行时的问题。
下一个问题。
调用array[-1]
不是错误,它几乎只是一个简写形式,*(array - 1)
即在数组前一个 int 地址处的值。假设操作系统已将此地址分配给您的程序,您只会将一些随机数据位转换为 int。
因为存储在该位置的数据可能每次都相同,所以你会得到相同的行为——只是没有多大意义。如果你想强制这样的事情导致错误,使用标准模板库的容器之一可能是最简单的,例如向量