矢量构造函数内存分配为常量迭代器,seg错误

时间:2013-02-17 01:45:33

标签: c++ vector constructor implementation fault

我正在弄清楚如何为这个构造函数分配空间。它应该在开始和结束之间用另一个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;
}

所以,要缩小问题范围:

为什么发生分段错误?

1 个答案:

答案 0 :(得分:0)

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