free()相同的堆内存与不同的指针

时间:2017-03-02 15:10:17

标签: c pointers malloc heap free

int main()
{
    int* Pointer;

    Pointer = (int*)malloc(sizeof(int));
    *Pointer = 33;

    int * Pointer2 = Pointer;

    printf("%d\n", *Pointer);

    free(Pointer);
    free(Pointer2);

    return 0;
}

输出是: 33 没有错误或警告。 我在两个指向相同堆地址的指针上发了誓。 我知道它的目标是释放他们两个,只需要一个免费的需要在这里使用(一个malloc一个免费),但如果我会这样做(两个都释放),它将是Undefined?或者它可以这样做它只是不会做任何事情从不同的指针(指针和指针2)释放相同的堆区域?

1 个答案:

答案 0 :(得分:2)

根据C11 standard draft 7.22.3.3p2

  

free函数会导致ptr指向的空间   取消分配,即可用于进一步分配。如果是ptr   一个null指针,不会发生任何操作。否则,如果参数没有   匹配之前由内存管理函数返回的指针,或   如果通过调用freerealloc 取消分配空格,   行为未定义

(重点是我的......)