使用核心文件

创建了这个非常糟糕的程序

 #include <stdio.h>
 #include <ctype.h>

// forward declarations

void bad_function()
{

   int *test = 5;

   free(test);

}

int main(int argc, char *argv[])
{
   bad_function();
   return 0;
}

gcc -g ex1.c

./a.out   //or whatever gcc creates
Segmentation fault (core dumped)

gdb -c core a.out

Core was generated by `./a.out'.

程序以信号 SIGSEGV,分段故障终止。malloc.c 中的#0 __GI___libc_free(mem = 0x5):2929 2929 malloc.c:没有这样的文件或目录。

(gdb) where

malloc.c 中的#0 __GI___libc_free(mem = 0x5):ex1.c 中的 bad_function() 中的#2 0x0000000000400549:ex1.c 中的 12#2 0x0000000000400564(argc = 1,argv = 0x7fffb825bd68):19

因为我用 -g 编译你可以看到调用 where 告诉我它不喜欢 bad_function() 第 12 行的代码

然后我可以检查我试图释放的测试变量

(gdb) up

ex1.c 中的 bad_function() 中的#1 0x0000000000400549:12 12 free(test);

(gdb) print test

$ 1 =(int *)0x5

(gdb) print *test

无法访问地址 0x5 处的内存

在这种情况下,错误是非常明显的我试图释放一个指针,该指针只是分配了地址 5,而不是由 malloc 创建的,因此 free 不知道如何处理它。