当malloc()或free()为您提供分段错误时,这意味着什么?

时间:2011-10-17 04:13:48

标签: c malloc free

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

然而,运行free()一直给我一个分段错误......

有没有人知道为什么会这种情况继续发生?

2 个答案:

答案 0 :(得分:2)

内存管理功能中的段错误几乎总是表明你做错了(比如覆盖超出有效范围的内存)之前实际上是段错误的调用。

Valgrind下运行代码可能会帮助您确定问题的真正根源。

答案 1 :(得分:1)

我会首先考虑内存损坏问题。例如,如果你分配N字节,然后写入N+100,那么你很可能会破坏内存领域。

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

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

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

您可能还想发布您遇到的问题的源代码,以便我们检查它。如果这样做,请尝试将其缩小为显示问题的最小示例。只有大多数专用 SOer (a)才能查看一些10,000行的庞然大物以找到您的问题。


(a)我当然不是那么专注: - )