Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».
Закрыт 10 месяцев назад.
Никак не могу написать деструктор для данноого класса
class Room_List
{
node Node;
public:
Room_List()
{
Node.Current=NULL;
Node.Next=NULL;
};
void Add_to_Room_List( Room* room)
{
node *n=&(this->Node);
while(n->Next!=NULL)
n=n->Next;
if(n->Current!=NULL)
{
node *tmp=(node*)malloc(sizeof(node));
tmp->Next=NULL;
tmp->Current=room;
n->Next=tmp;
}
else
{
n->Current=room;
n->Next=NULL;
}
};
~Room_List()
{
node *N=&(this->Node);
node *tmp=N;
while(N->Next!=NULL)
{
N=N->Next;
cout<<"tmp";//поиск места ошибки
free(tmp);
tmp=N;
}
cout<<"N error";//поиск места ошибки
free(N);
};
};
//Room-другой класс
class Room
{
friend class Room_List;
protected:
COORD OO;
COORD XY;
COORD_Matrix Doors;
Character_Matrix Enemies;//здесь только поля без методов
//...
};
Хочу чтобы деструктор освобождал память, выделенную под указатели, но не объекты класса Room.
При вызове деструктора возникает ошибка ( 3221226356 )
Возникает она в функции free();
Заранее спасибо за любую помощь.
Первый же free указывает на элемент в классе Room_List::Node . А память для него не выделялась.
Удалять нужно со второго элемента. Или , что правильнее Node сделать указателем, а не объектом. С первоначальным значением NULL.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей