Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将向量指针传递给函数会导致segfault_C++_Pointers_Vector_Segmentation Fault - Fatal编程技术网

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建议的引用。同意,通过引用传递通常是更好的解决方案我不同意;使用非常量引用是一种不好的样式,因为您无法猜测代码中传递的参数是可变的。