什么是<;exp+;6>;在gdb中是什么意思? 我用GDB调试C++代码。由于分段错误,程序停止 Program received signal SIGSEGV, Segmentation fault.

什么是<;exp+;6>;在gdb中是什么意思? 我用GDB调试C++代码。由于分段错误,程序停止 Program received signal SIGSEGV, Segmentation fault.,c++,debugging,segmentation-fault,gdb,C++,Debugging,Segmentation Fault,Gdb,所以我试图打印出变量的值,以确定错误的来源。我有一个名为“ring”的数组,类型为“Link**”,其中Link是我定义的类。数组中的每个元素都指向一个“Link*”变量。这是我打印“环”数组的前三个元素时的输出 (gdb) print ring[0] $13 = (Link *) 0x8125290 (gdb) print ring[1] $14 = (Link *) 0xb7e80b86 <exp+6> (gdb) print ring[2] $15 = (Link *) 0x8

所以我试图打印出变量的值,以确定错误的来源。我有一个名为“ring”的数组,类型为“Link**”,其中Link是我定义的类。数组中的每个元素都指向一个“Link*”变量。这是我打印“环”数组的前三个元素时的输出

(gdb) print ring[0]
$13 = (Link *) 0x8125290
(gdb) print ring[1]
$14 = (Link *) 0xb7e80b86 <exp+6>
(gdb) print ring[2]
$15 = (Link *) 0x8132e20
(gdb)打印环[0]
$13=(链接*)0x8125290
(gdb)打印环[1]
$14=(链接*)0xb7e80b86
(gdb)打印环[2]
$15=(链接*)0x8132e20
打印“环[1]”时,为什么在内存地址后出现“?这是什么意思


编辑:我在Arch Linux(3.16.4-1-Arch)上使用gdb 7.8

这意味着指针值等于
exp
符号的地址加上6。调试器只是试图在解码任何指针值时提供帮助,它试图查看指针是否恰好位于目标代码中的任何已知符号附近,如果是,它会打印出该信息

在检查函数代码的反汇编时,例如在分支目标中,您可能会看到这种表示法,但作为数据指针,这是非常不寻常的(函数指针倾向于直接指向函数符号,而不是偏移到它们中)


你几乎肯定有某种内存损坏错误,只是碰巧产生了这个值作为副作用。

你在哪个平台上?我可能弄错了方向,但那是一个损坏的指针,恰好指向代码段(exp函数的地址加上6个字节)?@JohnZwinck:Im使用Arch Linux(3.16.4-1)编译时包含所有警告和调试信息(
g++-Wall-Wextra-g
)。然后再加上
gdb
谢谢。正如您正确评估的那样,有一个内存错误。