C++ 将向量指针传递给函数会导致segfault
我将向量指针传递给另一个函数,该函数使用该指针推送数据:C++ 将向量指针传递给函数会导致segfault,c++,pointers,vector,segmentation-fault,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); } 向后推会导致SEGFULT。如果调用没有参数的bar,则vp将为空。然
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);
}
向后推会导致SEGFULT。如果调用没有参数的bar,则vp将为空。然后foo被传递一个空指针,因此,这个指令vp->push_back将生成分段错误。我猜你的向量是空的。。。您需要添加一个签入foo
void foo(vector<pair<int,int>> * vp)
{
if (vp != NULL)
vp->push_back(pair<int,int>(1,1));
}
如果您的编译器中有C++0x支持,也更喜欢使用nullptr。如果有问题,不要这样做。您几乎不应该使用指针传递向量之类的内容-而是使用引用:
void foo(vector<pair<int,int>> & vp){
vp.push_back(pair<int,int>(1,1));
}
你怎么打电话给酒吧的?调试器说了什么?通过引用传递向量。那么它就永远不能为NULL。我如何使向量指针成为默认值而不在条中指定NULL?因为我第一次将向量指针传递给foo时,它将是空的/空的。在使用它之前分配它,或者理想情况下,如果你真的不需要指针,则使用Neil建议的引用。同意,通过引用传递通常是更好的解决方案我不同意;使用非常量引用是一种不好的样式,因为您无法猜测代码中传递的参数是可变的。