我有一段 C 代码如下,它在下面的 calloc() 调用中崩溃:
... some code
free (ipl->fldptr);
ipl->fldptr = calloc (flds*4, sizeof(struct fldptr_type));
...some more code
我试图 gdb 它并在崩溃时得到以下回溯:
Program received signal SIGSEGV, Segmentation fault.
0x0000003ade478f94 in _int_malloc () from /lib/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.7.el6.x86_64 libgcc-4.4.4-13.el6.x86_64 libstdc++-4.4.4-13.el6.x86_64
(gdb) bt
#0 0x0000003ade478f94 in _int_malloc () from /lib/libc.so.6
#1 0x0000003ade4796d8 in calloc () from /lib/libc.so.6
#2 0x0000000000daf00d in myfunction (ipl=0x106f75f0, flds=11)
at myfile.c:1286
作为调试的一部分,我在 gdb 提示符下执行以下操作:
第 2 帧转到该用户代码堆栈帧并打印变量的值(flds,指针(ipl),它们似乎没问题。显然没有 NULL 取消引用。
但是 calloc() 仍然失败并且它在那里崩溃。这段代码之前成功执行了多次,但是当应用程序运行一段时间后它会崩溃。(内存泄漏??试图让 valgrind 在上面运行,但碰巧在 valgrind memcheck 工具下运行时,我的代码崩溃的行为是不可重复的)
我正在寻找一些指针来帮助我调试和修复这个问题。
一些相关信息 - gcc: 4.4.4 。红帽企业 Linux 服务器 6.0 64 位 Linux