Деструктор класса с полем структуры [закрыт]

248
11 февраля 2020, 14:20
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «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();

Заранее спасибо за любую помощь.

Answer 1

Первый же free указывает на элемент в классе Room_List::Node . А память для него не выделялась.

Удалять нужно со второго элемента. Или , что правильнее Node сделать указателем, а не объектом. С первоначальным значением NULL.

READ ALSO
Дистрибутив linux для языков С, С++, Python

Дистрибутив linux для языков С, С++, Python

Хочу расширить свои навыки как программиста в направлении кроссплатформенностиХочу изучить создание приложений на линуксе, использование...

250
Найти Collision в unigine на с++

Найти Collision в unigine на с++

Может быть кто то из вас пользовался unigine для разработкиИнтересует следующий простой вопрос необходимо найти где происходит пересечение...

228
LNK1104(libcurl.lib) не смотря на подключение библиотеки

LNK1104(libcurl.lib) не смотря на подключение библиотеки

Пробовал по разному подключать Curl в основном следовал этому пути, но когда не помогло, то смотрел на этот вариант, что тоже не решило проблемуПостоянно

237
g++ не видит статическую библиотеку

g++ не видит статическую библиотеку

Доброго времени суток

241