0

我正在分析核心转储问题。我已经运行了 valgrind 并查看了错误日志。但我无法解释以下消息。任何人都可以提供一些见解。我也尝试过使用 gdb,但没有得到太多信息。我查看了其他线程,发现它可能是 centos 问题。我正在使用 CentOS release 5.6 (Final) 版本。我听说 glibc 文件与 centos 5.6 不兼容,但我不确定。是否有人随时面临这个问题

==18035==
==18035== Jump to the invalid address stated on the next line
==18035==    at 0x0: ???
==18035==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==18035==
==18035==
==18035== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==18035==  Bad permissions for mapped region at address 0x0
==18035==    at 0x0: ???
==18035== Invalid free() / delete / delete[]
==18035==    at 0x47D951D: free (vg_replace_malloc.c:325)
==18035==    by 0x3141CD: ??? (in /lib/libc-2.5.so)
==18035==    by 0x313D46: ??? (in /lib/libc-2.5.so)
==18035==    by 0x47CC3B2: _vgnU_freeres (vg_preloaded.c:62)
==18035==  Address 0x198a55e0 is not stack'd, malloc'd or (recently) free'd
==18035==
4

1 回答 1

1

跳转到下一行所述的无效地址

这通常意味着以下两件事之一:

  1. 您正在通过函数指针调用函数,并且该指针是NULL,或者
  2. 您已经丢弃了堆栈,并且返回地址被 s 覆盖0

来自 GDB 的崩溃堆栈跟踪可能会有所帮助。

如果这是堆栈损坏问题,请尝试使用AddressSanitizer(与 Valgrind 不同,它在检测堆栈溢出方面做得很好)。

于 2012-07-20T17:36:27.383 回答