【问题标题】:Segmentation fault using dlmalloc使用 dlmalloc 的分段错误
【发布时间】:2012-07-03 09:47:14
【问题描述】:

我正在使用Doug Lea's dlmalloc memory allocator。但是,当我使用它时,我会得到分段。如果我使用正常的 malloc,我的程序运行良好。我记得我曾经读到你需要先调用一些初始化函数才能使 dlmalloc 工作,但我现在不记得是哪个函数了。我试图查看 cmets 以确定哪个函数,但仍然找不到。

【问题讨论】:

  • 它是来自 PARSEC 的流体动画基准。
  • 你的程序是多线程的吗?

标签: c linux gcc segmentation-fault malloc


【解决方案1】:

来自分配器源代码中的cmets:

线程安全:除非 USE_LOCKS 定义为非零,否则不是线程安全的

定义 USE_LOCKS 后,对 malloc、free 等的每个公共调用都被锁包围。默认情况下,这使用普通 pthread 互斥锁、win32 临界区或自旋锁(如果适用于平台且未通过设置 USE_SPIN_LOCKS=0 禁用)。

您需要使用USE_LOCKS 编译库,否则您可能会看到崩溃。

另一种可能性是您的程序表现出未定义的行为,不会导致常规 malloc 的后果。例如,它可能会在某处的分配区域之后写入一个字节,但该字节可能是内存块的一部分,比您请求的要大几个字节。在将程序与自定义分配器链接之前,使用 valgrind 使用“常规”malloc 检查您的程序是否存在内存错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 2015-11-16
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多