如果计数器超过malloc或calloc分配的内存,该怎么办?

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

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

并使用以下循环初始化d

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

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

这是未定义的行为 。 可能存在错误,当您违反规则时,操作系统可能会默默忽略 – 所有投注均已关闭。

代码中实际发生的事情取决于操作系统,编译器和运行它的体系结构,这可能容忍此违规,崩溃或执行其他操作,重点是 – 结果行为未定义。

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