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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
#1

Очистка памяти. Бинарное дерево. - C++

22.12.2011, 15:18. Просмотров 2455. Ответов 18
Метки нет (Все метки)

Как очистить память если не удалось выделить её,очистить то что удлось выделить

,и как удалить память если удалось выделить,

delete tree; не пойдет

Как это правильно реальзовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 15:18     Очистка памяти. Бинарное дерево.
Посмотрите здесь:

Бинарное дерево - C++
пытаюсь самостоятельно разобраться с этим, но чето не выходит вот мой листинг. вроде кудато чтото вводит, но ничего не выводит....

Бинарное дерево, классы - C++
Помогите! Мне нужно описать класс, реализующий бинарное дерево, обладающее возможностью добавление новых элементов, удаления существующих,...

Простое бинарное дерево - C++
Простое бинарное дерево с int ключом, добавлением, удалением по ключу и выводом на консоль. Можно использовать при начальном изучении и...

бинарное дерево порядка - C++
Написать программу, которая введенный пользователем массив целых чисел представляет в виде бинарного дерева порядка.

ребят!)бинарное дерево - C++
может кто знает как в С++ в программу впихнуть переводчик...??с русского на английский??может кто делал уже помогите..приведите пример хотя...

Создать бинарное дерево - C++
Ребята, помогите с такое задачей : нужно написать ф-цию для построения бинарного дерево определенным способом, а именно : на входе есть...

Бинарное дерево поиска - C++
#include <iostream> using namespace std; struct node { int key; node *left; node *right; node *p;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 16:38     Очистка памяти. Бинарное дерево. #2
C
1
2
3
4
while ( tree )
{  
    Del ( &tree ); //  Это ваша функция удаления элемента из дерева
}
Просто удаляем все элементы.
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
22.12.2011, 16:41  [ТС]     Очистка памяти. Бинарное дерево. #3
А если не хватило памяти при выделении?удалить то что выделили и выход как в коде реализовать?
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 16:45     Очистка памяти. Бинарное дерево. #4
Я бы просто выделял бы память сразу на все. Посчитал бы сколько требуется памяти на указатели + данные, выделил бы сразу, а потом проставил бы указатели. Тогда и удалять стало бы легче...
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 16:47     Очистка памяти. Бинарное дерево. #5
C
1
2
3
4
5
6
7
8
9
void NotMemory (node_t **tree)
{
    while ( *tree )
    {  
        Del ( tree ); //  Это ваша функция удаления элемента из дерева
    }
 
    exit (1);
}
Добавлено через 44 секунды
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Я бы просто выделял бы память сразу на все. Посчитал бы сколько требуется памяти на указатели + данные, выделил бы сразу, а потом проставил бы указатели.
И как же это сделать, когда заранее не знаешь кол-во узлов?
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 17:16     Очистка памяти. Бинарное дерево. #6
Если сразу неизвестно количество... Думаю нужно сделать все через рекурсию, Т.е. вызываешь функцию удаления дерева, она проверяет дочерние элементы, если они не NULL(память на них выделена), но вызываем этуже функцию и для них, а затем удаляем сам элемент.
Т.е. если мы не смогли выделить память, то просто вызываем функцию удаления и все.
Если понадобится - могу набросать код.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 17:39     Очистка памяти. Бинарное дерево. #7
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Т.е. вызываешь функцию удаления дерева,
Достаточно в любой их обходов добавить в конец free
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 17:42     Очистка памяти. Бинарное дерево. #8
Цитата Сообщение от go Посмотреть сообщение
Достаточно в любой их обходов добавить в конец free
Я не понял эту идею. Поточнее и пояснее пожалуйста.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 17:55     Очистка памяти. Бинарное дерево. #9
Например так
C
1
2
3
4
5
6
7
8
9
10
11
12
void iteration (node ** root)
{
    if ( *root )
    {
        iteration ( (*root)->left );
        iteration ( (*root)->right );
                free ( *root );
    }
}
 
iteration ( &tree ); // Вызов
tree = NULL;
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 17:59     Очистка памяти. Бинарное дерево. #10
Понял, я это и имел в виду под рекурсивным удалением.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.12.2011, 18:54     Очистка памяти. Бинарное дерево. #11
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Я бы просто выделял бы память сразу на все. Посчитал бы сколько требуется памяти на указатели + данные, выделил бы сразу, а потом проставил бы указатели. Тогда и удалять стало бы легче...
Удалять и так просто.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Free(TTreeNode *&root)
{
 if (root->Left)
 {
  Free(root->Left);
 }
 if (root->Right)
 {
  Free(root->Right);
 }
 delete *root;
 root=NULL;
}, а резервировать для дерева свою кучу - как раз усложнение. При удалении - порядка на три.
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
22.12.2011, 19:17  [ТС]     Очистка памяти. Бинарное дерево. #12
только еще !=0 дописать в if
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 19:28     Очистка памяти. Бинарное дерево. #13

Не по теме:

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
только еще !=0 дописать в if



Добавлено через 3 минуты
taras atavin, а утечки памяти не будет?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.12.2011, 19:40     Очистка памяти. Бинарное дерево. #14
Цитата Сообщение от go Посмотреть сообщение
taras atavin, а утечки памяти не будет?
Интересно, как она у тебя вообще получится?

Добавлено через 4 минуты
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
только еще !=0 дописать в if
Как раз не надо. Сейчас там написано условие существования узла по адресу, что правильно, а !=0 - условие на значение самого адреса, что в общем случае не правильно, так как 0 в принципе может быть и валидным, иное кроме конкретных архитектур ни где не прописано, приведение же именно указателя к bool должно учитывать, какой из адресов зарезервирован в качестве не валидного.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2011, 19:50     Очистка памяти. Бинарное дерево.
Еще ссылки по теме:

Бинарное дерево из НЕ бинарного - C++
тащемта всё ясно из названия темы есть небинарное дерево -> надо сделать из него бинарное не могу понять, как быть, если в небинарном...

Бинарное дерево (отладка) - C++
Прога работает и всё запускает (здесь фрагмент), но, к сожалению, выводит некие символы и т.д. Где что надо поправить? struct...

Переделать в бинарное дерево - C++
#include <iostream> #include <conio.h> using namespace std; struct Node{ int info; Node* next; }; class Spisok { ...

Структуры. Бинарное дерево. - C++
Поставлена такая задача. Является ли двоичное дерево линейным списком вершин? Реализовать надо на динамических структурах. PS....

Бинарное дерево поиска - C++
Всем привет! Не могу понять одну вещь. Есть вот такой код для заполнения бинарного дерева: #include <stdio.h> #include <stdlib.h> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 19:50     Очистка памяти. Бинарное дерево. #15
Извиняюсь, Free с free перепутал.
тогда второй вопрос: в 11-ой строке все верно?
Yandex
Объявления
22.12.2011, 19:50     Очистка памяти. Бинарное дерево.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru