Извините, если на этот вопрос уже был дан ответ. Я искал изменение размера динамических массивов, и все советы, похоже, использовать STL Vector, но я делаю задание, в котором смысл сделать свой собственный, минимальный, векторный шаблон класса.
Мой векторный класс должен хранить динамический массив структур, созданных при чтении из входного файла. Одна из вещей, которую он должен сделать, - изменить размер, когда он заполнен. Он работает до определенного момента - обрабатывает 5121 строку из 52207 строк, а затем завершает работу с ошибкой «Процесс возвратил -1073741819 (0XC0000005)».
Я осмотрелся и обнаружил, что это ошибка выделения памяти. Я очень плохо знаком с программированием и C ++, и я озадачен тем, что в моей программе вызывает это. Я предполагаю, что это в моем изменении размера кода массива. Любая помощь будет принята с благодарностью!
Код моего векторного шаблона:
#ifndef VECTOR_H
#define VECTOR_H
#include <iostream>
using namespace std;
template <class T>
class Vector {
public:
/// Constructor
Vector();
/// Copy constructor
Vector(const Vector<T>& otherVector);
/// Destructor
virtual ~Vector();
/// assignment operator
const Vector<T>& operator= (const Vector<T>&);
/// methods
void addElement(const T& newElement);
T getElement(int index) const;
int getLength() const;
protected:
int arraySize;
int length;
T *p;
};
template <class T>
Vector<T>::Vector()
{
arraySize = 10;
length = 0;
p = new T[arraySize];
}
template <class T>
Vector<T>::Vector(const Vector& otherObject)
{
arraySize = otherObject.arraySize;
length = otherObject.length;
p = new T[arraySize];
for(int i = 0; i < length; i++)
p[i] = otherObject.p[i];
}
template <class T>
Vector<T>::~Vector()
{
delete [] p;
}
template <class T>
const Vector<T>& Vector<T>::operator= (const Vector<T>& newVector)
{
if(this != &newVector)
{
delete [] p;
arraySize = newVector.arraySize;
length = newVector.length;
p = new T[arraySize];
for(int i = 0; i < length; i++)
p[i] = newVector.p[i];
}
return *this;
}
template <class T>
void Vector<T>::addElement(const T& newElement)
{
if(length == arraySize)
{
// create a new resized array
T *temp;
temp = new T[arraySize*2];
// copy elements of p into temp
for(int i = 0; i < length; i++)
{
temp[i] = p[i];
}
// delete p and create new p and set equal to temp
delete [] p;
arraySize *= 2; // set array size to double
p = new T[arraySize];
p = temp;
// delete temp array
delete [] temp;
// add new element and incerement length;
p[length] = newElement;
length++;
}
else
{
p[length] = newElement;
length++;
}
}
template <class T>
T Vector<T>::getElement(int index) const
{
return p[index];
}
template <class T>
int Vector<T>::getLength() const
{
return length;
}
#endif