0

我最近在这里问了一个问题,但没有得到我可以使用的答案,不幸的是:

C++ STL 列表函数使用空列表进行段错误

我一直在尝试使用 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() 吗?如果不是,为什么不呢?我该如何进一步调试?

谢谢大家!

4

1 回答 1

1

要调试内存错误,我建议您在 valgrind 中运行该程序

valgrind --tool=memcheck program_name

并修复 valgrind 指出的所有错误

于 2013-02-27T19:31:54.907 回答