c - malloc() 中的段错误?

标签 c segmentation-fault malloc stack-trace

我在 malloc() 例程中遇到段错误。这是来自 gdb 的堆栈跟踪:

#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 ?? ()

这是怎么回事?什么会导致 malloc() 出现段错误?

编辑:这是来自 xmalloc() 的代码。这是非常标准的,正如您从堆栈跟踪中看到的那样,它正在调用大小为 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;
}

connection.c 中的第 117 行:

        item->readBuffer = xmalloc(kInitialPacketBufferSize);

最佳答案

您很可能会在代码的其他地方看到错误的影响,即在分配之外访问内存。如果足够幸运,您的代码可以触及 malloc 用于跟踪分配的一些内部值。

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

关于c - malloc() 中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12856145/

相关文章:

C、topper段错误

C: 函数 ‘vsyslog’ 的隐式声明

php - 'child pid 10708 exit signal Segmentation fault (11)' 错误的根本原因是什么?

c - 为什么解引用与 malloc 的行为不同?

c - 循环中的 Malloc 导致内存泄漏

无法使用在 Solaris 上运行的代码在 Linux 上从 `siginfo_t` 检索 PID

c - fcntl() 的返回值带有 F_GETFD 标志?

c++ - 由于段错误 :11 程序执行停止

c++ - 由于进程退出期间的静态变量清理,c++ STL 映射中的段错误查找

c - malloc() : memory corruption in a weird place