Deep copy int array Переполнение стека

Я хочу глубоко скопировать массив int. Я получаю сообщение об ошибке: _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse), когда он проходит через деструктор. Мне сказали, что он пытается удалить то, чего там нет. Пожалуйста, дайте мне знать, если я на правильном пути, и мне просто нужно что-то поменять, или я полностью потерялся и не знаю об этом. Я могу добавить больше кода, если это необходимо.

Спасибо за ответы.

.час

private:
int* _myArray;
int _size;
int _capacity;

.CPP

MyVector::MyVector()
{
_myArray = new int[2];
_size = 0;
_capacity = 2;
}

MyVector::MyVector(int aSize)
{
_myArray = new int[aSize];
_size = 0;
_capacity = aSize;
}

MyVector::~MyVector()
{
if(_myArray != NULL)
{
delete[] _myArray;
_myArray = NULL;
}
}
MyVector::MyVector(const MyVector& mVector)
{
_capacity = mVector._capacity;
_size = mVector._size;

//  if(mVector._myArray)
//  {
//  _myArray = new int[_capacity];

//  copy(mVector._myArray, mVector._myArray+_capacity, _myArray);
//  }
}

MyVector& MyVector::operator=(MyVector& setterVect)
{
delete [] _myArray;

if(setterVect._myArray)
{
_myArray = new int[_capacity];

copy(setterVect._myArray, setterVect._myArray+_capacity, _myArray);
}

return *this;
}

1

Решение

Вы должны убедиться, что вы следуете «Правило трех».

Помимо конструктора копирования & деструктор Вы также должны предоставить оператор присваивания копии, который должен делать глубокую копию динамически размещенного элемента указателя.

Кстати, лучшее решение — просто удалить динамически размещенный элемент и использовать std::vector это избавит вас от всех хлопот ручного управления памятью.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]