gpt4 book ai didi

c malloc 问题(内存损坏)

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:23 24 4
gpt4 key购买 nike

当使用 malloc 时,如果它产生一个带有错误的核心转储:

malloc(): memory corruption: ....... ***

这是否意味着 malloc 试图分配不能自由分配的内存?如果是这样,造成这种情况的原因是什么?

最佳答案

这完全取决于您的 malloc 实现,但通常这意味着在 malloc 之前的某个时刻,某些东西向 malloc 缓冲区写入的数据超过其大小。

许多 malloc 实现将它们的一些数据内嵌在它们的内存中,换句话说:

+--------------------------------+
|14 bytes -> Padding |
+--------------------------------+
|2 bytes -> Internal malloc info |
+--------------------------------+
|6 bytes -> Your data |
+--------------------------------+
|8 bytes -> Padding |
+--------------------------------+
|2 bytes -> Internal malloc info |
+--------------------------------+

因此,如果您的某些代码或库将 16 字节写入该 6 字节缓冲区,它将覆盖填充和内部 malloc 信息的 2 字节。下次您调用 malloc 时,它将尝试遍历其数据以找到空间,找到被覆盖的空间,这将是荒谬的,因为您覆盖了它,破坏了堆。

根据实现的不同,这种错误也可能是由双重释放引起的。

关于c malloc 问题(内存损坏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1639095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com