【发布时间】:2019-02-11 04:23:40
【问题描述】:
当涉及到系统如何释放内存时,我想知道 malloc() 调用是否与您分配 malloc() 的初始变量相关联。
例如,我可以执行以下操作吗:
void * ptr1 = malloc(50);
void * ptr2 = ptr1;
ptr1 = malloc(25);
free(ptr2);
我打算释放 最初分配给 ptr1 的内存,但后来被另一个指针释放了。
【问题讨论】:
-
你必须释放你 malloc 的每个块。谁当前指向该块并不重要。你已经成功地释放了这里的 50 字节块,但是你的 25 字节块是悬空的。
-
@LeeDanielCrocker:必须吗?
-
好吧,在出口处留下可到达的街区不是问题,但这是马虎的证据。
-
误会:你
free不是一个变量,你free是malloc之前获得的某个内存区域,它是一个指针值 (可以保存在 C 源代码的 几个 变量中,也可以不保存) -
@LeeDanielCrocker:一个例外是在大型应用程序中,所有所需的上下文结束都已执行并且系统性能很有价值。那么进行进程内簿记就没有意义了,当进程终止时,它只会被抹去。当然,管理这种“退出不干净”的行为本身就是一个挑战,因为你不想在仅仅清理进程中的子任务而不是最终退出时忘记分配的内存。