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

Pou*_*uya 0 c

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

double *d = calloc(10, sizeof(double));
Run Code Online (Sandbox Code Playgroud)

并使用以下循环初始化d

for (k=0;k<11;k++){
d[k] = k;
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,没有错误.但我觉得,因为在上限k11,应该有什么不对,因为d是长度的阵列10.请让我知道为什么程序没有错误执行.提前致谢.

ami*_*mit 8

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

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