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

如果计数器超出malloc或calloc分配的内存,该怎么办,c,C,我在C中使用以下命令在64位系统中将80个字节分配给d double *d = calloc(10, sizeof(double)); 并使用下面的循环初始化d for (k=0;k<11;k++){ d[k] = k; } 当我运行程序时,没有错误。但我觉得既然k的上限是11,那么应该有问题,因为d是长度为10的数组。 请让我知道为什么程序执行时没有错误。 提前谢谢。这是我的。当您违反规则时,可能会出现错误,并且操作系统可能会默默地忽略该错误-所有赌注均已取消 代码中实际发生的情况取

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

double *d = calloc(10, sizeof(double));
并使用下面的循环初始化d

for (k=0;k<11;k++){
d[k] = k;
}
当我运行程序时,没有错误。但我觉得既然k的上限是11,那么应该有问题,因为d是长度为10的数组。 请让我知道为什么程序执行时没有错误。 提前谢谢。

这是我的。当您违反规则时,可能会出现错误,并且操作系统可能会默默地忽略该错误-所有赌注均已取消


代码中实际发生的情况取决于操作系统、编译器和运行的体系结构,它可能对这种违反行为容忍,崩溃或做其他事情,关键是行为不明确。

< P>我相信C和C++不在数组和指针中进行边界检查,只要它在程序栈中。我相信当访问超出程序堆栈时,它会抛出分段错误。

如果编译器使用gccAsk for space for 10 double,并在那里存储11,则很有可能出现分段错误。看到问题了吗?此外,您要求10个双字节的空间,这可能是80字节,但不能保证。不,这是未定义的行为;不保证存在seg故障。请看另一个答案。该死的。。。我没票了,别相信!该标准并未禁止边界检查,但从未强制执行边界检查。少数C/C++编译器进行边界检查,绝大多数没有。这个答案并不能解释问题所在。否则A-OK。