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

Vector constructor memory allocation for constant iterators, seg fault

本文关键字:分配 seg 错误 内存 构造函数 迭代器 常量      更新时间:2023-10-16

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

因此,缩小问题范围:

为什么会出现分段错误?

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