我最近在这里问了一个问题,但没有得到我可以使用的答案,不幸的是:
我一直在尝试使用 gdb 来调试问题,但我对某事的含义有疑问:
我将一个列表声明为一个类的成员,如下所示:
std::list<Thing*> inventory;
...然后实例化它所在的类(一个名为“pc”的对象)。在 gdb 中,我认为这表明我分配了一些内存?
(gdb) p &pc.inventory
$7 = (std::list<Thing*, std::allocator<Thing*> > *) 0xbffff22c
此外,在代码问题行之前的一行(本质上,调用 'inventory.size()' 会导致段错误),这仍然成立:
(gdb) p &inventory
$8 = (std::list<Thing*, std::allocator<Thing*> > *) 0xbffff22c
...但是我仍然得到段错误:
(gdb) n
558 if (inventory.size() == 52) {
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x0804e3fe in std::_List_const_iterator<Thing*>::operator++ (this=0xbfff94e0)
at /usr/include/c++/4.4/bits/stl_list.h:223
223 _M_node = _M_node->_M_next;
我的问题本质上是这样的:当然,如果我有成员列表的地址,则该列表存在,我应该能够在其上使用 size() 吗?如果不是,为什么不呢?我该如何进一步调试?
谢谢大家!