Непоследовательное поведение при доступе к вектору, переданному по ссылке

Я реализовал функцию для объединения двух отсортированных векторов (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) ссылкой, иногда вызывает ошибку seg, почему это так?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector