Итак, я сейчас в некоторой растерянности и надеюсь, что кто-то может помочь. У меня есть функция, определенная в библиотеке с именем 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_free
на list_freex
(т.е. просто что-то другое), больше не возникает ошибка сегмента. Другая странная вещь - если я изменю имя в файле .c, я не получу предупреждения о «неопределенной ссылке на list_free» или о любой другой ошибке, которую я получу, если забуду добавить ссылку в библиотеку.
Таким образом, меня убеждают, что функция определяется в другом месте, но я понятия не имею, где. grep -R list_free .
не предлагает никакой помощи, и вывод gdb, похоже, не указывает на иное.
Так что мне интересно, есть ли у кого-нибудь советы о том, как найти эту функцию. Кроме того, я переименовал функцию, как отмечалось выше, на данный момент, поскольку у меня нет другого выбора ... но я не уверен, что это хорошая / безопасная идея? То есть, я мог бы просто так замаскировать другие проблемы?
Заранее спасибо.