我正在向另一个使用该指针推送数据的函数传递一个向量指针:
void foo(vector<pair<int,int>> * vp){
vp->push_back(pair<int,int>(1,1)); //causes segfault
}
void bar(vector<pair<int,int>> *vp = NULL){
foo(vp);
}
push_back会导致段错误。
答案 0 :(得分:5)
如果您在没有参数的情况下致电bar
,则vp将为NULL
。然后foo
传递NULL
指针,因此,此指令vp->push_back
将生成分段错误。
答案 1 :(得分:3)
我猜你的向量是NULL ...你想要在foo中添加一个检查。
void foo(vector<pair<int,int>> * vp)
{
if (vp != NULL)
vp->push_back(pair<int,int>(1,1));
}
如果您的编译器支持C ++ 0x,也更喜欢使用nullptr
。
答案 2 :(得分:3)
如果疼,不要这样做。你几乎不应该使用指针传递像向量之类的东西 - 而是使用引用:
void foo(vector<pair<int,int>> & vp){
vp.push_back(pair<int,int>(1,1));
}