0

例如:

array[2]={1,2};
myInt=5;

if (array[myInt-6]==2)
   cout << true << endl;
else
   cout << false << endl;

if 语句中数组中的引用值明显越界。当我编译并运行它时,我得到了错误的输出,这是有道理的,因为条件不正确,但我想知道为什么没有输出错误。

4

3 回答 3

10

因为未定义的行为是未定义的。任何事情都可能发生,包括看起来有效。

编译器和运行时都不需要诊断。您必须自己处理边界检查。

于 2012-07-24T14:03:52.317 回答
0

C++ 不是内存安全语言,因此避免此类问题是您的工作,而不是编译器或运行时的问题。

下一个问题。

于 2012-07-24T15:23:06.263 回答
-4

调用array[-1]不是错误,它几乎只是一个简写形式,*(array - 1)即在数组前一个 int 地址处的值。假设操作系统已将此地址分配给您的程序,您只会将一些随机数据位转换为 int。

因为存储在该位置的数据可能每次都相同,所以你会得到相同的行为——只是没有多大意义。如果你想强制这样的事情导致错误,使用标准模板库的容器之一可能是最简单的,例如向量

于 2012-07-24T14:23:49.250 回答