【发布时间】:2012-10-12 09:31:41
【问题描述】:
我在 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);
【问题讨论】:
-
如果您发布代码会有所帮助!
-
请编辑您的问题以包含
processConnectionQueue函数,至少在 117 左右的行。 -
您能否发布代码,尤其是在致电
malloc()之前? -
如果你想自己解决,你可以使用GDB的
up命令向上调用堆栈,当你在位置4时(这是你的函数)你可以检查所有变量,看看它们看起来没问题。 -
在第 117 行发布您的代码。
标签: c segmentation-fault malloc stack-trace