我在C中使用以下命令将80个字节(在64位系统中)分配给d。
double *d = calloc(10, sizeof(double));
使用以下循环初始化d
for (k=0;k<11;k++){
d[k] = k;
}
当我运行程序时,没有错误。但我觉得因为k
的上限是11
,所以应该有一些错误,因为d是长度为10的数组。
请让我知道为什么程序执行没有错误。
提前谢谢。
答案 0 :(得分:8)
这是undefined behavior。可能存在错误,当您违反规则时,操作系统可能会默默忽略 - 所有投注均已关闭。
代码中实际发生的事情取决于操作系统,编译器和运行它的体系结构,这可能容忍此违规,崩溃或执行其他操作,重点是 - 结果行为未定义。
答案 1 :(得分:0)
我相信C和C ++不会对数组和指针进行边界检查,只要它在程序堆栈中即可。我相信当访问在程序堆栈之外时它会引发分段错误。