我有一塊C代碼如下這在釋放calloc(崩潰)下面撥打:釋放calloc調用失敗並且代碼崩潰
... some code
free (ipl->fldptr);
ipl->fldptr = calloc (flds*4, sizeof(struct fldptr_type));
...some more code
我試圖入庫它,我得到下面回溯在墜毀:
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),他們似乎否。 ñ ULL解除引用顯然。
但仍然calloc()失敗,並在那裏崩潰。這段代碼先前已成功執行多次,但稍後應用程序運行一段時間後會崩潰。 (Mem漏洞??嘗試獲取valgrind運行它,但它碰巧在valgrind memcheck工具下運行時,我的代碼崩潰的行爲是不可重複的)
我正在尋找一些指針來幫助我調試和修復這個。
某些相關信息 - gcc:4.4.4。紅帽企業Linux服務器6.0 64位Linux
很有可能你損壞了堆並銷燬了* alloc()內部數據結構。找到這樣一個錯誤的更簡單的方法是通過'valgrind'運行你的程序。 – FatalError