Falló la aserción de depuración BLOCK_TYPE_IS_VALID (pHead-> nblockuse) de Deconstructor

Estoy bastante perdido ahora mismo. Hice una clase de vectores. Todo funciona como me gustaría que funcionara, hasta el final. Cuando se llama al destructor, aparece un mensaje de error: la depuración de la depuración falló BLOCK_TYPE_IS_VALID (pHead-> nblockuse). He visto algunas preguntas como esta en SO, pero lo que he intentado no ha funcionado.

parte de .h.

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

#include "File.h"

 const string RETURN_CARRIAGE_STR = "\n";
 const string SIZE_STR = "Size ";
 const string CAPACITY_STR = "Capacity ";
 const int INITIAL_CAPACITY = 2;

 int main(void)
{
cout << "\nCreating a vector Sam of size 4.";
MyVector sam( 4 );

cout << "\nPush 12 values into the vector.";
for (int i = 0; i < 12; i++)
    sam.push_back(i);

cout << "\nHere is sam: ";
cout << sam;
cout << "\n---------------\n";

    cout << "\nCreating a vector Joe of size 4.";
MyVector joe( 4 );
cout << "\nPush 6 values into the vector.";
for (int i = 0; i < 6; i++)
    joe.push_back(i * 3);

cout << "\nHere is joe: ";
cout << joe;
cout << "\n---------------\n";

cout << "\nTest the overloaded assignment operator \"joe = sam\": ";
joe = sam;


cout << "\nHere is sam: ";
cout << sam;
cout << "\n---------------\n";

cout << "\nHere is joe: ";
cout << joe;
cout << "\n---------------\n";

// pass a copy of sam by value
PrintV(sam);

cout << endl;
system("PAUSE");
 }

 void PrintV(MyVector v)
 {
cout << "\n--------------------\n";
cout << "Printing a copy of a vector\n";
cout << v;
 }

 // Default Constructor
 MyVector::MyVector()
 {
_myArray = new int[INITIAL_CAPACITY];
_size = 0;
_capacity = INITIAL_CAPACITY;
//cout << "Default Constructor" << endl;
 }

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

//cout << "Parameterized Constructor" << endl;
 }

 MyVector::~MyVector()
 {
if(_myArray != NULL)
{
    delete[] this->_myArray; //  --------------This is where I get an error
    this->_myArray = NULL;
}

//cout << "Destructor" << endl;
 }


 int MyVector::GetSize()
 {
return _size;
//cout << " size";
 }

 int MyVector::GetCapacity()
 {
return _capacity;
//cout << _capacity << " capacity" << endl;
 }

 void MyVector::Clear()
 {
int* resize_arr = new int[INITIAL_CAPACITY];
delete[] _myArray;
_myArray = resize_arr;
_capacity = INITIAL_CAPACITY - 1;
_size = 0;
 }

 void MyVector::push_back(int newValue)
 {
if(_size < _capacity)
{
    _myArray[_size] = newValue;
}
else  {
    int* resize_arr = new int[_capacity*2];
    for(int i = 0; i <= _size; i++)
        resize_arr[i] = _myArray[i];

    resize_arr[_size] = newValue;
    delete[] _myArray;
    _myArray = resize_arr;
    _capacity = _capacity * 2;
}
_size++;
//cout << _size << " size" << endl;
 }

 int MyVector::at(int idx)
 {
return _myArray[idx];
//cout << _myArray[idx] << " value at index" << endl;
 }

 ostream& operator<<(ostream& os, MyVector& vec)
 {
ostringstream convert;
ostringstream convertCap;
convert << vec.GetSize();
string sizeConverted = convert.str();
convertCap << vec.GetCapacity();

string capConverted = convertCap.str();
string firstTemp = "";
firstTemp = SIZE_STR + sizeConverted  + RETURN_CARRIAGE_STR + CAPACITY_STR + capConverted + RETURN_CARRIAGE_STR;

for(int idx = 0; idx < vec.GetSize(); idx++)
{
    string secondTemp = "";
    ostringstream convertSize;
    convertSize << vec.at(idx);
    string vecAtIdx = convertSize.str();
    secondTemp = vecAtIdx + RETURN_CARRIAGE_STR;
    cout << secondTemp;
}

os <<  firstTemp;
return os;
 }

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

//MyVector* mPtr = new MyVector();

_myArray = setterVect._myArray;
_capacity = setterVect._capacity;
_size = setterVect._size;

return *this;
 }

Respuestas a la pregunta(2)

Su respuesta a la pregunta