当malloc()或free()出现分段错误时,这意味着什么?

当malloc()或free()出现分段错误时,这意味着什么?,c,malloc,free,C,Malloc,Free,我目前正在使用dlmalloc()来查看它比原来的libcmalloc()快多少 但是,运行free()总是给我一个分段错误 有人知道这种情况持续发生的一些逻辑原因吗?我将首先研究内存损坏问题。例如,如果分配N字节,然后写入其中的N+100,很可能会损坏内存 这是因为许多实现将其内务管理信息(块大小、列表指针等)保持在线(在实际数据区域之间) 另一种可能是双释放块,如果该内存已经用于其他分配(特别是如果您的地址现在处于数据区域的中间而不是开始),则可能会导致问题。 首先,确保你遵守规则。其他任何

我目前正在使用
dlmalloc()
来查看它比原来的libc
malloc()
快多少

但是,运行
free()
总是给我一个分段错误


有人知道这种情况持续发生的一些逻辑原因吗?

我将首先研究内存损坏问题。例如,如果分配
N
字节,然后写入其中的
N+100
,很可能会损坏内存

这是因为许多实现将其内务管理信息(块大小、列表指针等)保持在线(在实际数据区域之间)

另一种可能是双释放块,如果该内存已经用于其他分配(特别是如果您的地址现在处于数据区域的中间而不是开始),则可能会导致问题。

首先,确保你遵守规则。其他任何事情都是未定义的行为,所有的赌注都没有了

您可能还想发布您遇到的问题的源代码,以便我们可以检查它。如果你这样做,试着把它减少到最小的例子,展示问题。只有最专注的SOer(a)会想查看大约10000行的庞然大物以找到您的问题



(a) 我当然不是那么专心致志:-)

内存管理函数中的segfault几乎总是表明在调用实际segfault之前,您做了一些错误的事情(比如覆盖了超出有效边界的内存)

在下运行代码可以帮助您确定问题的真正根源。

如果您调用
dlmalloc()
,您是将其与
dlfree()
配对,对吗?