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

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

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;
}

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

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


person user2079578    schedule 17.02.2013    source источник
comment
Вы отлаживали его с помощью gdb, valgrind или обоих?   -  person us2012    schedule 17.02.2013
comment
Кроме того, с каким типом T вы создаете экземпляр класса шаблона и где взять итераторы, с помощью которых вы вызываете конструктор?   -  person us2012    schedule 17.02.2013
comment
Вы не инициализировали size() и capacity() в конструкторе. На push_back(), вызываемый в конструкторе, могут влиять случайно инициализированные значения.   -  person timrau    schedule 17.02.2013
comment
Вы инициализировали theSize, theCapacity? Как именно он разбился?   -  person phoeagon    schedule 17.02.2013
comment
@timrau Вау, я потратил столько времени, пытаясь понять, что происходит, и это было так просто, ха-ха. Спасибо   -  person user2079578    schedule 17.02.2013


Ответы (1)


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

person timrau    schedule 17.02.2013