Malloc 在同一个堆位置?

Malloc at the same heap location?

我想了解 mallocfree 幕后的情况。所以我尝试保留一个指针,影响一个值,释放它并使用另一个 malloc 调用获得相同的地址。

我希望获得与之前在此特定位置写入的值相同的值,但它在某种程度上有所不同...

int main(void)
{
    int* foo;
    int* bar = malloc(sizeof *bar);
    *bar = 42;
    printf("&bar = %p, bar = %d\n", (void*)bar, *bar);
    free(bar);

    foo = malloc(sizeof *foo);
    printf("&foo = %p, foo= %d\n", (void*)foo, *foo);

    return 0;
}        

我得到的是:

&bar = 0x800103a8, bar = 42
&foo = 0x800103a8, foo= 1630223800

为什么读取值与42不同?是因为 MMU?

这是

  1. 实现已定义,C 标准不对 malloc 中使用的分配器策略施加任何限制。例如,BSD 使用 jemalloc,而 glibc 可能使用不同的分配器。

  2. 可能是未定义的行为。正如Joachim Pileborg已经提到的,malloc返回的内存值是不确定的,访问它可能是未定义的。