Распределение памяти векторного конструктора для постоянных итераторов, ошибка сегмента

У меня проблемы с выяснением, как выделить место для этого конструктора. Предполагается построить вектор с элементами из другого вектора между началом и концом.

template <class T> Vector<T>::Vector(const_iterator start, const_iterator finish)
{
array = new T[2 * capacity()];

for( ; start != finish; start++ ){
push_back(*start);
}
}

Я пытался отладить это, но не могу понять это. push_back выглядит так:

template <class T> void Vector<T>::push_back(const T & val)
{
if (size() == capacity()) {
reserve (2 * capacity() + 1);
}

array[ theSize++ ] = val;
}

Какие звонки резервируют ..

template <class T> void Vector<T>::reserve(int newCapacity)
{
if (newCapacity < size()) {
return;
}

T * array_copy = array;

array = new T [newCapacity];
for (int i = 0; i < size(); i++) {
array[i] = array_copy[i];
}

theCapacity = newCapacity;

delete [] array_copy;
}

Итак, чтобы сузить вопрос:

Почему происходит ошибка сегментации?

0

Решение

Вы не инициализировали size() а также capacity() в конструкторе. push_back() На вызываемый конструктор могут влиять случайно инициализированные значения.

0

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

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

По вопросам рекламы [email protected]