Форум программистов, компьютерный форум CyberForum.ru

Связанный двусторонний список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Builder С++ и встроенный ассемблер, исправить код http://www.cyberforum.ru/cpp-beginners/thread150430.html
есть код для задачи: По двум целым массивам X и Y из 5 элементов,составить массив Z по правилу: Zi=Xi+Yi {mod 3}. Нужно исправить код по правилу Zi=min(Xi+Yi) #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall...
C++ Организовать функцию Дорогие форумчане,Надо Организовать функцию определения большего из двух чисел,которы передаются в функцию по ссылке..Буду очень признателен!!! http://www.cyberforum.ru/cpp-beginners/thread150406.html
Начинающий изучать C++ (подскажите литературу) C++
Здравствуйте всем, я хочу начать изучать C++, мне нужно чтоб мне посоветовали какие книжки почитать, для изучения синтаксиса языка C++ да и вообще, что-нибудь типа Фаронова для Делфи, то же самое и для C++. Сайтик специализированный где много исходников, описаний, уроков и обсуждений про этот язык (что то похожее на delphiexpert.ru только для C++), да и ещё среду для разработки порекомендуйте,...
Дан символ "с" C++
Дан символ "с". Вывести символ, который в кодовой таблице следует за символом "с".
C++ компилирую данный фаил с расширением *.h http://www.cyberforum.ru/cpp-beginners/thread150398.html
компилирую данный фаил с расширением *.h выдаёт ошибку в третей стоке. не могу понять причину. а потом, после первой компиляции и сообщения об ошибке, когда пробую компилирывать ещё раз, он просто ничего не делает. даже если в коде ошибки. ничего не пишет. жми на COMPILE сколько хочешь. среда Dev C++. помогите. #ifndef _PLORG_H_ #define _PLORG_H_ class Plorg { private: string...
C++ Вычислить сумму целых частей элементов массива В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму целых частей элементов массива, расположенных после последнего отрицательного элемента подробнее

Показать сообщение отдельно
Spellz
1 / 1 / 0
Регистрация: 29.01.2010
Сообщений: 25
29.06.2010, 19:57     Связанный двусторонний список
Решил написать свой двусторонний список и совершенно внезапно столкнулся с проблеммой отчистки. Итак вот класс элемента списка и его деструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <class T>
class mListNode
{
public:
    mListNode();
    mListNode(const mListNode<T>&);
    ~mListNode();
    void setNext(mListNode* newNext) { next = newNext;};
    void setPrev(mListNode* newPrev) { prev = newPrev;};
    void setInfo(T* inf)             { info = inf;  };
    mListNode* getNext() const       { return next; };
    mListNode* getPrev() const       { return prev; };
    T* getInfo() const               { return info; };
    mListNode<T>& operator= (const mListNode<T>&);
protected:
    T* info;
    mListNode* prev;
    mListNode* next;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class T>
mListNode<T>::~mListNode()
{
    cout << "info\n";
    delete info;
    info = NULL;
    cout << "prev\n";
    delete prev;
    prev = NULL;
    cout << "next\n";
    delete next;
    next = NULL;
}
Объявления класса списка, функции удаления:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T>
class mList
{
public:
    mList() { size = 0; head = 0;};
    mList(const mList<T>&);
    //~mList();
    void pushBack(T& inf);                      
    void pushTop(T& inf);                       
    mList<T>& operator=(const mList<T>&);
    T& operator[] (unsigned int num) const ;    
    void clear();                              
    void popFront();
    class exOutOfRange { };                     // oor exeption
protected:
    mListNode<T>* head;
    unsigned int size;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <class T>
void mList<T>::clear()
{
    if (size == 0)
        return;
    while (size != 0)
    {
        popFront();
    }
 
}
template <class T>
void mList<T>::popFront()
{
    if (size == 0)
        return;
    mListNode<T>* tmp = head;
    head = head->getNext();
    delete tmp;
    size--;
    head->setPrev(NULL);
 
}
Подабавлял int, нормально выводит. При попытке вытолкнуть элемент или очистить (впринципе одно и тоже) программа крашиться в консоли последняя строчка info (см деструктор элемента списка) и вываливается сообщение:

Debug Assertion Failed!
...dbgdel.cpp
line:52

Expression: _BLOCK_TYPE_IS_VALID (pHead->nBlockUse)

Как понимаю я по многу раз удаляю одно и тоже, но никак не могу понять где утечка >.<
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru