访问通过引用传递的向量时的行为不一致

时间:2018-09-20 11:21:28

标签: c++ segmentation-fault pass-by-reference

我实现了一个函数,将两个排序向量(v1和v2)合并为更大的排序向量(fa),方法是将这些向量通过const引用传递给它,然后比较哪个值最小,以便也可以对更大的排序。它有时可以工作,但是有时在第一次访问传递的向量时发生分段错误。

以下是该函数的代码:

void merge(const vector<int>& v1, 
          const vector<int>& v2,
          vector<int>& fa)
{
int i = 0, p1 = 0, p2 = 0;

while(p2 < v2.size() && p1 < v1.size())
{
    if(v1[p1] < v2[p2]){
        fa[i] = v1[p1];
        p1++;
        i++;
    }
    else
    {
        fa[i] = v2[p2];
        p2++;
        i++;
    }
}
//cover the cases where one of the arrays is done and the other isn't
while(p1 == v1.size() && p2 < v2.size()) 
{
    fa[i] = v2[p2];
    p2++;
    i++;
}
while(p2 == v2.size() && p1 < v1.size())
{
    fa[i] = v1[p1];
    p1++;
    i++;
}
}

最初,我尝试使用迭代器,但是它也不一致,因此将其更改为整数,可能是因为迭代器在第一个函数调用后消失了。

同样,当我按值传递时,它也永远不会给我带来细分错误。

TLDR-访问由(const)引用传递的向量容器有时会给我seg错误,为什么?

0 个答案:

没有答案