c-malloc是保留空间还是只将指针返回到起始位置



我知道malloc(n(返回一个指向n字节内存的指针。假设我想要5个字节的内存,并初始化为一个整数数组(我知道分配的字节数不足(。

int *a = malloc(5);
*a = 1234;
*(a+1) = 5000;
printf("%d ",*a);
printf("%d",*(a+1));

据我所知,前四个字节由1234使用,第二个元素应该只剩下一个字节。但是,输出是1234 5000。第二个元素如何获得剩余的3个字节?

稍后,如果我通过free(a)取消初始化数组,它会释放第二个元素的额外字节吗?

malloc是保留空间还是只返回指向起始位置的指针?

malloc()确实保留了空间,并希望代码尊重所分配的空间。如果你试图访问更多,你就只能靠自己了。

第二个元素如何获得剩余的3个字节?

未定义的行为(UB(。任何事情都有可能发生。代码的其余部分可能无关紧要。

您"重写";恰好在CCD_ 5分配的字节之后的字节。这些字节不属于您
你很幸运它没有崩溃,因为这是未定义的行为。

编译器可以根据需要优化代码,而不必执行所写的内容。只要产生预期的结果。

因此,在我的机器上,编译器删除了非必要的读写操作,并将代码转换为

nt *a = malloc(5);
printf("%d ",1234);
printf("%d",5000);

突然间什么都没有被覆盖!

最新更新