将向量指针传递给函数会导致段错误

时间:2011-06-13 19:58:23

标签: c++ pointers vector segmentation-fault

我正在向另一个使用该指针推送数据的函数传递一个向量指针:

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会导致段错误。

3 个答案:

答案 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));
}