使用核心檔案

建立了這個非常糟糕的程式

 #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 不知道如何處理它。