c中的自由记忆

Vai*_*wal 1 c memory malloc

我怀疑:

void *a = malloc(40);
free(a);
Run Code Online (Sandbox Code Playgroud)

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

Ker*_* SB 5

我假设你有这种情况:

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

assert(a == b);
Run Code Online (Sandbox Code Playgroud)

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

但是,既然如此a == b,你已经回答了自己的问题:价值b与价值相同a!

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