【问题标题】:Can a freed-up memory segment be accessible from a process core?可以从进程核心访问已释放的内存段吗?
【发布时间】:2015-02-02 11:29:06
【问题描述】:

在给定地址的情况下,是否可以从内核访问先前使用 Malloc 分配的已释放堆内存段?鉴于每个 free() 都不会将内存返回给内核池(因为本地内存管理)。

如果是,如何将其与对有效(未释放)地址的访问区分开来?

基本上,我试图从核心转储一些数据结构。并且想知道,我是否会处理有效的数据结构或以前分配但已释放的数据结构

【问题讨论】:

    标签: c++ c linux memory-management memory-leaks


    【解决方案1】:

    即使尝试访问以前释放的内存也是未定义的行为

    如果它确实被释放了,它可能会被你自己的程序重用,所以地址仍然是它“拥有”的。然而,通过释放的指针访问它不会做你所期望的(或者它可能会,因为未定义的行为)。

    所以不,您不能简单地检查指针是否被释放,您需要自己进行内存管理。像RAII 这样的技术会帮助你。

    【讨论】:

    • 谢谢,但是什么是 RAII?另外,我依稀记得一些 gdb 配置选项来删除内存保护。不知怎的,想不通。未定义如何?
    • @joe 添加了解释 RAII 的链接。未定义的行为实际上意味着任何事情都可以发生:如果你取消引用一个释放的指针,你的程序可能会工作,打电话给你的妈妈,让你的父亲怀孕......你不能对 UB 进行推理,因为所有的保证都是无效的。
    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 2021-06-24
    • 2020-12-28
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2015-06-26
    相关资源
    最近更新 更多