Malloc在同一堆位置?

时间:2016-05-19 12:49:49

标签: c malloc heap-memory

我试图通过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 个答案:

答案 0 :(得分:1)

这是

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

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