malloc()中的分段错误?

cha*_*e55 0 c malloc stack-trace segmentation-fault

我在malloc()例程中遇到了分段错误.这是来自gdb的stacktrace:

#0  0x00007ffff787e882 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff787fec6 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007ffff7882a45 in malloc () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x0000000000403ab0 in xmalloc (size=1024) at global.c:14
#4  0x00000000004020fb in processConnectionQueue (arguments=0x60a4e0)
    at connection.c:117
#5  0x00007ffff7bc4e9a in start_thread ()
   from /lib/x86_64-linux-gnu/libpthread.so.0
#6  0x00007ffff78f24bd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#7  0x0000000000000000 in ?? ()
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?什么可能导致malloc()段错误?

编辑:这是来自xmalloc()的代码.它非常标准,正如你可以从stacktrace中看到它调用大小为1024的malloc.

void* xmalloc(size_t size)
{
    void* result = malloc(size);
    if(!result)
    {
        if(!size)
        {
            result = malloc(1);
        }
        if(!result)
        {
            fprintf(stderr, "Error allocating memory of size %zu\n", size);
            exit(-1);
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

连接c中的第117行:

        item->readBuffer = xmalloc(kInitialPacketBufferSize);
Run Code Online (Sandbox Code Playgroud)

小智 6

您最有可能在代码中的其他位置看到错误的影响,即在分配之外访问内存.如果您足够幸运,您的代码可以触及malloc用于跟踪分配的一些内部值.

如果您有可能,尝试将您的代码与libefence或类似的分配检查器链接,并使用它来找到真正的问题.