我正在使用gdb调试C ++代码。由于分段错误,程序停止。
Program received signal SIGSEGV, Segmentation fault.
所以我试图打印出变量的值来识别错误的来源。我有一个名为'Link'的数组'Link'',其中Link是我定义的类。数组中的每个元素都指向一个'Link *'变量。这是我打印'ring'数组的前三个元素时的输出。
(gdb) print ring[0]
$13 = (Link *) 0x8125290
(gdb) print ring[1]
$14 = (Link *) 0xb7e80b86 <exp+6>
(gdb) print ring[2]
$15 = (Link *) 0x8132e20
打印'ring [1]'时,为什么我在内存地址之后得到''?这是什么意思?
编辑:我在Arch Linux(3.16.4-1-ARCH)上使用gdb 7.8
答案 0 :(得分:4)
这意味着指针值等于exp
符号加6的地址。只是调试器试图提供帮助 - 每当它解码任何指针值时,它会尝试查看指针是否恰好是谎言在目标代码中的任何已知符号附近,如果是这样,它会打印出该信息。
在检查函数代码的反汇编时,您可能会看到这样的符号,例如:在分支目标中,但作为数据指针,这是非常不寻常的(函数指针往往直接指向函数符号,而不是偏移到它们中)。
你几乎肯定会遇到某种内存损坏错误,恰好会产生这种价值作为副作用。