gpt4 book ai didi

c - c中的空闲内存

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:05 24 4
gpt4 key购买 nike

我有以下疑问:

void *a = malloc(40);
free(a);

如果我认为 malloc(40) 分配了 40 字节的内存并返回该内存的地址,然后 free(a) 释放/释放该内存但不对驻留在其中的位模式做任何事情内存。所以,假设这个相同的内存被分配给 void *b,然后打印 b 指向的地址处的值给我与驻留的相同的值,或者它给了我一个垃圾值,为什么?

最佳答案

我假设你有这种情况:

void * a = malloc(40);
free(a);
void * b = malloc(40);

assert(a == b);

这当然是完全合理的,因为内存很可能会被重用。

但是,由于 a == b,您已经回答了自己的问题:b 的值与 a 的值相同>!

我相信您问错了问题,您实际上有兴趣比较b 指向的内存。那是一锅完全不同的鱼。在两次 malloc 调用之间可能发生任何事情。没有什么是可以保证的。 malloc 调用的返回值指向的内存未初始化,您不能对其内容做出任何假设。按理说,在典型的优化 C 库中,内存不会发生变化,但不能保证。 “安全”运行时环境可能会选择使用特定测试模式覆盖已释放或分配的内存,以便更好地检测无效访问。

关于c - c中的空闲内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12601066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com