首页 > 解决方案 > 将动态分配的内存释放给两个指针

问题描述

我有两个指针 p1 和 p2,它们都指向一块动态分配的内存——假设它是一个大小为 16 的 int 数组。

    p1 = (int *)malloc(sizeof(int) * 16);
    p2 = p1;

如果我这样做free(p1),它是否会保持动态分配的内存完好无损,因为 p2 也引用它,或者它只是释放内存,并且指针变得无用(假设我们在那里输入新数据)。

标签: c

解决方案


简短的回答:它释放内存并且指针指向一个未分配的内存地址。

一点上下文:在 C 中,内存的动态分配和内存被指针引用的事实是不相关的。您可以分配一块内存但没有被任何指针引用(这称为内存泄漏,这很糟糕,因为您将无法释放它),并且您可以拥有一个指向内存地址的指针未分配。

另一个主题是这对于您不显式分配和释放动态内存但此任务委托给垃圾收集器的语言如何工作:在这种情况下,垃圾收集器可能不会释放该内存空间,因为您正在使用另一个指针引用它,因此您可能仍想使用该数据(但这取决于垃圾收集器的逻辑)。


推荐阅读