0

我在 C 中使用以下命令将 80 个字节(在 64 位系统中)分配给 d。

double *d = calloc(10, sizeof(double));

并使用以下循环初始化 d

for (k=0;k<11;k++){
d[k] = k;
}

当我运行程序时,没有错误。k但我觉得由于is的上限11,应该有问题,因为 d 是长度为 10 的数组。请让我知道为什么程序执行时没有错误。提前致谢。

4

2 回答 2

8

这是未定义的行为。当您违反规则时,可能会出现错误,并且操作系统可能会默默地忽略它-所有赌注都已取消。

代码中实际发生的情况取决于操作系统、编译器和运行它的架构,这可能会容忍这种违规、崩溃或做其他事情,关键是 - 结果行为是未定义的。

于 2013-02-02T07:23:41.803 回答
0

我相信只要在程序堆栈中,C 和 C++ 就不会对数组和指针进行边界检查。我相信当访问在程序堆栈之外时会引发分段错误。

于 2013-02-02T07:27:29.490 回答