У меня есть классы Deck и PlayingCard. Объект Deck должен иметь динамически размещенный массив указателей на объекты PlayingCard:
PlayingCard** _playing_cards;
Чтобы инициализировать этот массив, вызываются функции конструктора и сборки Deck:
Deck::Deck(int size)
{
_total_playing_cards = size;
_deal_next = 0;
build();
}
void Deck::build()
{
_playing_cards = new PlayingCard*[_total_playing_cards];
for(int i = 1; i <= _total_playing_cards; ++i)
{
_playing_cards[i-1] = new PlayingCard(i % 13, i % 4);
}
}
Освобождение памяти, выделенной с помощью 'new', обрабатывается деструктором:
Deck::~Deck()
{
for(int i = 0; i < _total_playing_cards; ++i)
{
delete[] _playing_cards[i];
}
delete[] _playing_cards;
}
Затем у меня есть отдельный файл deck_test.cpp, в котором есть main () для простого создания и уничтожения объекта Deck:
int main()
{
Deck deck(52);
deck.~Deck();
return 0;
}
Компилируется нормально, но при отладке Visual Studio сообщает: «Необработанное исключение в 0x5ab159da (msvcr100d.dll) в Playing Cards.exe: 0xC0000005: Место чтения нарушения доступа 0xfeeefee2». При просмотре стека вызовов возникает проблема, когда я использую оператор delete [] в цикле for внутри деструктора. Разве это не правильный способ освободить память из массива указателей?