【发布时间】:2010-07-28 21:17:58
【问题描述】:
我声明:
typedef std::tr1::shared_ptr<ClassA> SharedPtr;
然后:
std::vector<SharedPtr> mList;
还有:
typedef std::vector<SharedPtr>::iterator ListIterator;
mList.size() 的返回值为 0,但是当我使用迭代器时,它会遍历为空的向量!这就是我使用迭代器的方式:
for(ListIterator it = mList.begin(); it!=mList.end(); it++)
(*it)->someMethod();
它执行“someMethod()”,然后抛出分段错误。迭代器是如何在空向量中迭代的????
更多信息
我正在使用 GTK,所以这是我传递主要对象的方式:
g_signal_connect(G_OBJECT(widget), "event", G_CALLBACK(&ClassB::fun), this)
this是 ClassB 本身。
然后我像这样收到它:
gboolean ClassB::fun(GtkWidget *widget, GdkEvent *event, ClassB *data)
{
// The mList is here, and is accessed like this:
// data->mList
}
mList 被声明为我所引用的,当我访问其他属性时,假设 data->xxx 它可以工作并且很好,问题仅出现在 mList 并且此属性不是动态分配的。
我检查了*data 和this 的内存地址,它们是同一个地址。
【问题讨论】:
-
应该不是,能给我们更完整的代码吗?
-
我添加了更多信息
-
那么,A 类将 shared_ptrs 的向量保存到 A 类的实例?这似乎没有多大意义。
-
对不起,我弄错了,我会改正的,我不能显示原始代码对不起。
-
写一个可编译的例子来展示这种行为。否则我们必须假设他们复制了错误的代码。
标签: c++ iterator segmentation-fault shared-ptr tr1