【发布时间】:2015-02-02 11:29:06
【问题描述】:
在给定地址的情况下,是否可以从内核访问先前使用 Malloc 分配的已释放堆内存段?鉴于每个 free() 都不会将内存返回给内核池(因为本地内存管理)。
如果是,如何将其与对有效(未释放)地址的访问区分开来?
基本上,我试图从核心转储一些数据结构。并且想知道,我是否会处理有效的数据结构或以前分配但已释放的数据结构
【问题讨论】:
标签: c++ c linux memory-management memory-leaks
在给定地址的情况下,是否可以从内核访问先前使用 Malloc 分配的已释放堆内存段?鉴于每个 free() 都不会将内存返回给内核池(因为本地内存管理)。
如果是,如何将其与对有效(未释放)地址的访问区分开来?
基本上,我试图从核心转储一些数据结构。并且想知道,我是否会处理有效的数据结构或以前分配但已释放的数据结构
【问题讨论】:
标签: c++ c linux memory-management memory-leaks
即使尝试访问以前释放的内存也是未定义的行为。
如果它确实被释放了,它可能会被你自己的程序重用,所以地址仍然是它“拥有”的。然而,通过释放的指针访问它不会做你所期望的(或者它可能会,因为未定义的行为)。
所以不,您不能简单地检查指针是否被释放,您需要自己进行内存管理。像RAII 这样的技术会帮助你。
【讨论】: