我正在使用Doug Lea's dlmalloc memory allocator。但是当我使用它时,我会得到分段。如果我使用正常的malloc,我的程序运行正常。我记得我曾经读过你需要首先调用dlmalloc的一些初始化函数来工作,但我现在不记得哪个函数了。我试图查看注释以找出哪个函数,但仍无法找到它。
答案 0 :(得分:3)
来自分配器源代码中的注释:
胎面安全:除非USE_LOCKS定义为非零
,否则不是线程安全的当定义USE_LOCKS时,每次对malloc,free等的公共调用都被锁定。默认情况下,如果平台可用,则使用普通pthread互斥锁,win32临界区或自旋锁,而不是通过设置USE_SPIN_LOCKS = 0来禁用。
您需要使用USE_LOCKS
编译库,否则您可能会看到崩溃。
另一种可能性是您的程序显示未定义的行为,不会导致常规malloc
的后果。例如,它可能会在某处的分配区域之外写入一个字节,但该字节可能是内存块的一部分,该内存块比您请求的大几个字节。使用valgrind在使用“常规”malloc检查程序是否存在内存错误,然后再将其与自定义分配器链接。