代码之家  ›  专栏  ›  技术社区  ›  Gene Vincent

malloc()和malloc\u consolidate()中的段故障

  •  25
  • Gene Vincent  · 技术社区  · 16 年前

    我确认机器有足够的可用内存,它甚至没有开始交换。 我检查了ulimits的数据段和最大内存大小,两者都设置为“unlimited”。

    更新:

    2 回复  |  直到 16 年前
        1
  •  26
  •   Vadim Kotov First Zero    8 年前

    http://www.gnu.org/s/libc/manual/html_node/Heap-Consistency-Checking.html#Heap-Consistency-Checking :

    另一种检查和防止使用中的错误的可能性 马洛克检查。设置MALLOC_CHECK_u时,一个特殊(效率较低) 错误,例如同一参数对free的双重调用,或 MALLOC\u CHECK_0设置为0,任何检测到的堆损坏都是静默的 忽略;如果设置为1,则在stderr上打印诊断;如果设置为2, 立即调用abort。这可能很有用,因为 很难找到。

        2
  •  14
  •   Martin B    16 年前

    最有可能的情况是,你在破坏堆——也就是说,你写的内容超出了你分配的内存的限制,这就重写了 malloc() 用于管理堆。这导致 访问无效地址,应用程序将崩溃。

    内存不足不会导致 马洛克() NULL . 如果不检查,可能会导致代码崩溃 无效的 .

    "Ptrcheck" tool 相反。