【发布时间】:2009-09-21 12:25:04
【问题描述】:
我有一些复杂的 C++ 代码,但问题缩小到在结构列表上执行 push_back:
list<cache_page> cachedPages;
void f()
{
cache_page cpage(a,b);
cachedPages.push_back(cpage);
}
我已经评论了struct cache_page 的所有数据成员,但错误仍然存在。如果我注释push_back 行,则没有错误。
可能是什么原因?
我尝试过使用GDB,错误出现在_List_Node_base::hook()函数中。
template < class T >
class A
{
T x;
public:
void func()
{
x->f();
}
};
class B : public A < B* >
{
list<cache_page> cachedPages;
public:
void f()
{
cache_page cpage;
cachedPages.push_back(cpage);
}
};
我有一个什么都不做的复制构造函数。我在 cache_page 中没有数据成员。
【问题讨论】:
-
您的列表的确切类型是什么? (list
或 list 或任何智能指针类?) -
列表
cachedPages; -
列表在哪里声明,在哪里实例化?可能有很多原因。
-
出于测试目的,您可以在 B 类中再添加一个成员变量,并尝试访问它而不是 f() 中的列表。如果它仍然崩溃,那么 A 类中的 x->f() 正在尝试对无效的 x 进行操作。
-
发布
cache_page代码。如果您在list<cache_page>中收到错误,可以很安全地假设问题出在cache_page而不是list。
标签: c++ list stl segmentation-fault