【发布时间】:2011-06-25 21:51:57
【问题描述】:
所以,我现在有点不知所措,希望有人能提供帮助。我在一个名为“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 输出似乎没有其他指示。
所以我想知道是否有人对如何查找可能定义此函数的位置有任何提示。另外,我现在已经重命名了上面提到的函数,因为我似乎没有任何其他选择......但我不确定这是否是一个好/安全的主意?即,我这样做可以掩盖其他问题吗?
提前致谢。
【问题讨论】:
-
至少提供test_calc.c、model.c以及相关头文件的摘录。
标签: c debugging gdb segmentation-fault