我使用了一个整数指针,指向堆区域中的1个字节的地址。 然后我在整数指针处分配了max integer的值。我认为printf语句的输出应该是垃圾值而不是正确的值。怎么可能?请解释一下。
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int main()
{
int *i;
i=malloc(sizeof(char));
*i=INT_MAX;
printf("%d",*i);
return 0;
}
答案 0 :(得分:3)
C在编译时和运行时都没有边界检查。如果你写出超出已分配内存的范围,你将会有未定义的行为。
答案 1 :(得分:1)
当你在你的记忆界外读或写时,你会调用undefined behavior。
这意味着您的程序可能会崩溃,可能会出现无法预测的行为或打印未知值,或者它似乎可以正常工作。您的程序碰巧打印出预期值的事实不能依赖。
在幕后,它可能与您系统上malloc
的实现以及它如何跟踪已分配的内存以及它是否在其分配中使用任何缓冲区空间有关。但同样,你不能依赖任何一个。