常量迭代器的矢量构造函数内存分配,seg错误
Vector constructor memory allocation for constant iterators, seg 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;
}
因此,缩小问题范围:
为什么会出现分段错误?
您没有在构造函数中初始化size()
和capacity()
。构造函数中调用的push_back()
可能会受到随机初始化值的影响。
相关文章:
- 将数组的地址分配给变量并删除
- Seg Fault Issue C++ (file IO / getline)
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 将内存分配给指针数组时SEG故障
- SEG故障取决于指针分配的顺序
- 使用vector最小化堆分配会导致seg错误
- SEG 错误,同时将内存分配给结构向量的指针
- 将取消引用的对象分配给对象会导致 seg 错误
- 在结构中分配字符串时出现 Seg 错误
- 常量迭代器的矢量构造函数内存分配,seg错误