ошибка выделения памяти в Visual C ++

У меня проблема с выделением памяти в c ++. Это мой код

#include <iostream>

using namespace std;

class Animal
{
public:
Animal(void)
{

}

Animal(int weight):itsWeight(weight)
{

}

~Animal(void)
{

}

int GetWeight()
{
return itsWeight;
}

void Display()
{
cout << "Weight: " << itsWeight<< endl;
}
private:
int itsWeight;
};

class ArrayTemplate
{
public:
ArrayTemplate(int size)
{
animals = new Animal[size];
index = 0;
}

//copy constructor
ArrayTemplate(const ArrayTemplate &other)
{

}

~ArrayTemplate(void)
{
//if I delete this animals pointer, I got problem.
delete animals;
}

ArrayTemplate operator [] (const Animal &rAnimal)
{
animals[index] = rAnimal;
index++;
return *this;
}

void Display()
{
for (int i=0; i<index; i++)
{
animals[i].Display();
}
}
private:
//current index.
int index;
Animal * animals;
};

int main(int argc, const char * argv[])
{

ArrayTemplate temp(2);
Animal animal1(20);
Animal animal2(30);
temp[animal1];
temp[animal2];
temp.Display();
}

Если я удаляю указатель * животных, я получаю эту ошибку.

cpp_mock_question1 (19849,0x7fff7c3be310) malloc: * ошибка для объекта 0x7fff5fbff8c0: освобожденный указатель не выделен
*
установить точку останова в malloc_error_break для отладки

-2

Решение

Если вы выделите что-то с new[] Вы должны освободить его с соответствующим delete[]:

delete[] animals;
4

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

ArrayTemplate::operator[] возвращается по значению по какой-то причине, что делает копию. И ваш конструктор копирования пуст, так что вы получите двойное освобождение.

Вы должны написать код глубокой копии в своем конструкторе копирования и всегда возвращать *this по ссылке.

Вы также должны использовать delete[]не delete,

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector