首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在胶质细胞中检测到双游离?

如何在胶质细胞中检测到双游离?
EN

Stack Overflow用户
提问于 2013-09-03 11:10:52
回答 4查看 200关注 0票数 1
代码语言:javascript
复制
* glibc detected ./load: double free or corruption (!prev): ADDRESS **

当使用glibc时,它怎么知道我是双重释放的?它能追踪到我放出来的所有东西吗?它是否包含在元数据中,比如免费如何知道要释放多少空间(How does free know how much to free?)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-03 11:20:21

对于每个分配,内存管理器保留一些“头”(最有可能是树节点或链接列表)。当您传递给释放不包含有效头的东西时--嗯,它不能正确地被释放。至于这些信息保存在哪里--它取决于实现,但通常放在malloc的地址之前--然而,大小和结构很可能是未知的,但至少它给出了一个信息头有多容易被破坏/损坏/覆盖/等等。

票数 6
EN

Stack Overflow用户

发布于 2013-09-03 11:25:19

当你破坏某个东西时,你会得到一个内存块上的指针。你已经知道^^了。内存管理还在*您的单元(例如,跟踪单元大小)之前保留一个(隐藏)头,当您释放指针时,标题为红色,以检查它是否为有效指针。空闲操作也擦除标头。如果您释放两次,标题将不再有效的第二个空闲。所以才被发现。

票数 1
EN

Stack Overflow用户

发布于 2013-09-03 11:25:48

C语言标准说,第二次释放指针是一种未定义的行为。您在glibc中看到的是这种未定义的行为的一个特殊情况--一个有用的行为--发出消息。大多数分配程序都会跟踪所分配的内容,并在一定数量范围内跟踪已释放的内容。但你不能指望这种行为。

还允许C程序静默地崩溃或忽略情况(或它认为必要的任何其他操作)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18590786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档