簡體   English   中英

在函數調用(C)上進行段錯誤

[英]Segfaulting on function call (C)

因此,我現在有些茫然,希望有人能提供幫助。 我在一個名為“ list_free”的庫中定義了一個函數,正如您可以想象的那樣,該函數將釋放您先前創建的列表。 當我從另一個模塊中調用此函數時,我的程序出現段錯誤。 當運行GDB時,我得到:

(gdb) bt
#0  *__GI___libc_free (mem=0x65656853) at malloc.c:3709
#1  0x0804f279 in list_free ()
#2  0x0012ffef in set_var (...) at src/calc/model.c:337
#3  0x0804b320 in test_dependency_updates (_i=0) at src/tests/test_calc.c:63
#4  0x080507ea in srunner_run_all ()
#5  0x0804d2b9 in main () at src/tests/test_all.c:19

因此,引起我注意的那一行是#1 ...沒有引用該函數的來源。 當我將函數的名稱從list_freelist_freex (即,只是有所不同)時,不再出現段錯誤。 另一個奇怪的事情是,如果我更改了.c文件中的名稱,則不會收到“未定義對list_free的引用”的警告,也不會因忘記鏈接到庫而產生任何錯誤。

因此,我被認為該函數是在其他地方定義的,但是我不知道在哪里。 一個grep -R list_free . 沒有提供幫助,並且gdb輸出似乎並未表明其他情況。

因此,我想知道是否有人對如何確定該函數的定義有任何建議。 另外,由於我似乎沒有其他選擇,因此我現在已如上所述重命名了函數……但是我不確定這是否是一個好主意? 即,我可以這樣掩蓋其他問題嗎?

提前致謝。

如果您使用的是linux,則valgrind是查找內存管理問題的寶貴工具。

嘗試從鏈接器生成鏈接映射。

在我的系統上,要在stdout上生成地圖(很多行)

gcc ... -Wl,-M ...
    ###       ^ lowercase L

或者,使用地圖創建文件

gcc ... -Wl,-Map,a.map ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM