0

我在弄清楚如何为这个构造函数分配空间时遇到了麻烦。它应该在开始和结束之间用另一个 Vector 的元素构造一个 Vector。

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

因此,缩小问题范围:

为什么会发生分段错误?

4

1 回答 1

0

您没有在构造函数中初始化size()capacity()。被push_back()调用的构造函数可能会受到随机初始化值的影响。

于 2013-02-17T02:48:36.517 回答