c - 将动态分配的内存释放给两个指针
问题描述
我有两个指针 p1 和 p2,它们都指向一块动态分配的内存——假设它是一个大小为 16 的 int 数组。
p1 = (int *)malloc(sizeof(int) * 16);
p2 = p1;
如果我这样做free(p1)
,它是否会保持动态分配的内存完好无损,因为 p2 也引用它,或者它只是释放内存,并且指针变得无用(假设我们在那里输入新数据)。
解决方案
简短的回答:它释放内存并且指针指向一个未分配的内存地址。
一点上下文:在 C 中,内存的动态分配和内存被指针引用的事实是不相关的。您可以分配一块内存但没有被任何指针引用(这称为内存泄漏,这很糟糕,因为您将无法释放它),并且您可以拥有一个指向内存地址的指针未分配。
另一个主题是这对于您不显式分配和释放动态内存但此任务委托给垃圾收集器的语言如何工作:在这种情况下,垃圾收集器可能不会释放该内存空间,因为您正在使用另一个指针引用它,因此您可能仍想使用该数据(但这取决于垃圾收集器的逻辑)。
推荐阅读
- docker - Kubernetes 不显示节点
- java - 如何查看 Java 编译器的内容
- r - 如何使用 dtw 距离函数自定义 proxy::dist 返回的内容
- node.js - 如何使用nodejs拦截来自浏览器的http请求?
- html - SVG:iframe 在 foreignObject 之外渲染
- c# - 我应该抛出异常还是返回false?
- laravel - Laravel 从选项卡提交表单并返回视图中的同一选项卡
- postgresql - 对于具有值的列,左连接返回 null
- unit-testing - Spock 在 Groovy 中测试 ResultSet
- javascript - 在 reactjs 中有条件地将道具传递给组件