【问题标题】:_kernel_vsyscall () in core files核心文件中的_kernel_vsyscall()
【发布时间】:2012-01-24 13:19:33
【问题描述】:

我的程序突然崩溃并在核心文件中引发此错误。

确切地说:

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有关还是我的代码有误?

如何解决?

谢谢。

【问题讨论】:

  • 读取堆栈跟踪的方式是顶部指示您现在的位置,底部指示您曾经的位置。从下往上阅读,寻找您拥有或调用的方法。

标签: c linux core coredump


【解决方案1】:

错误在free(),这很可能是你在程序中调用的一个函数,也是经常出错的地方。您可能释放了一个无效指针(可能是通过双重释放?)。堆栈跟踪显示了所有其他函数,因为这些函数在free() 下方调用。这在错误调用库函数时很常见,因此您通常只需留意您识别的内容。根据经验,您需要开始查看您识别的堆栈跟踪的最远位置(即在您的程序中),但如果在堆栈或程序中进一步存在其他内存损坏,请查看那里不会有太大帮助。

为清楚起见进行编辑:“在堆栈中”的意思是“在列表的顶部”,因为正如 Sixlettervariables 所指出的那样,您希望找到您最近所在的位置 em> 你认识的。我意识到我最初的措辞可能令人困惑。

【讨论】:

  • +1,“开始查看堆栈跟踪中您认识的最远的东西”。
  • freemalloc 等中找到在崩溃中表现出来的错误的最快方法通常是在 Valgrind 或 ASan 下运行程序。
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2011-07-01
  • 2011-01-05
  • 1970-01-01
相关资源
最近更新 更多