我的程序突然崩溃并在核心文件中引发此错误。
准确来说:
Program terminated with signal 6, Aborted.
#0 0x00c60410 in __kernel_vsyscall ()
#0 0x00c60410 in __kernel_vsyscall ()
#1 0x00444df0 in raise () from /lib/libc.so.6
#2 0x00446701 in abort () from /lib/libc.so.6
#3 0x0047d3ab in __libc_message () from /lib/libc.so.6
#4 0x004856c5 in _int_free () from /lib/libc.so.6
#5 0x00485b09 in free () from /lib/libc.so.6
这与 Linux 有关还是我在代码中犯了错误?
如何解决这个问题?
错误出现在
free()
中,这很可能是您在程序中调用的函数,也是容易出错的地方。您可能释放了一个无效的指针(可能通过双重释放?)。堆栈跟踪显示了所有其他函数,因为这些函数是在 free()
下面调用的。当错误地调用库函数时,这种情况很常见,因此您通常只需留意您识别的内容即可。根据经验,您需要开始查看您识别的堆栈跟踪中最远的东西(即在您的程序中),但如果堆栈上方或程序中存在其他内存损坏,请查看那里不会有太大帮助。
为清楚起见进行编辑:“在堆栈中”意味着“朝着列表的顶部”,因为正如 Sixlettervariables 指出的那样,您想要找到您认识的最近的位置。我意识到我最初的措辞可能会令人困惑。