Непоследовательное поведение при доступе к вектору, переданному по ссылке - PullRequest
0 голосов
/ 20 сентября 2018

Я реализовал функцию, чтобы объединить два отсортированных вектора (v1 и v2) в больший отсортированный (fa), передавая векторы по константной ссылке на него и сравнивая, какое значение является наименьшим, так что больший можно также отсортировать,Иногда это работает, но иногда, когда происходит первый доступ к пропущенным векторам, возникает ошибка сегментации.

Вот код для функции:

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) ссылкой, иногда вызывает ошибку сегмента, почему это так?

...