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

时间:2013-02-02 07:22:04

标签: c

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

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

使用以下循环初始化d

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

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

2 个答案:

答案 0 :(得分:8)

这是undefined behavior。可能存在错误,当您违反规则时,操作系统可能会默默忽略 - 所有投注均已关闭。

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

答案 1 :(得分:0)

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