10 / 10 / 2
Регистрация: 25.05.2010
Сообщений: 52
|
||||||
1 | ||||||
Рекурсия и статические переменные.17.09.2011, 10:46. Показов 3709. Ответов 11
Метки нет (Все метки)
Что - то я запутался. Пытаюсь написать деструктор для своего бинарного дерева поиска, но мне не понятно поведение статических переменных. У меня не заходит в левую ветвь дерева, удаление происходит только правых элементов. Отсюда утечки памяти. Если убрать static у переменных то все правильно удаляется (выводиться, в моем примере). Я правильно понимаю то, что это не хорошо использовать в рекурсивных функциях «обычные» переменные, так как выделяется слишком много памяти под них? Помогите, пожалуйста, разобраться.
0
|
17.09.2011, 10:46 | |
Ответы с готовыми решениями:
11
Статические переменные статические переменные Статические переменные Глобальные статические переменные |
10 / 10 / 2
Регистрация: 25.05.2010
Сообщений: 52
|
|
17.09.2011, 11:11 [ТС] | 3 |
С чего вы взяли, что у вас правильно, а у меня не правильно? Вы сначала проверяйте, что пишете, перед тем как выкладывать.
0
|
10 / 10 / 2
Регистрация: 25.05.2010
Сообщений: 52
|
|
17.09.2011, 11:24 [ТС] | 5 |
Thinker, ваш вариант, такой же как и мой, только дерево выводиться(удаляется) немного иначе и он так же не работоспособен со статическими переменными.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
17.09.2011, 11:39 | 6 |
emilen, просто из любопытства: а зачем в рекурсивно вызываемой функции удаления узлов дерева статические переменные?
0
|
10 / 10 / 2
Регистрация: 25.05.2010
Сообщений: 52
|
|
17.09.2011, 11:51 [ТС] | 7 |
easybudda, потому что используя не статические переменные при большой глубине рекурсии будет выделено много памяти и возможно переполнение стека, статические переменные должны исправить эту проблему, я правильно понимаю?
0
|
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
|
|
17.09.2011, 12:01 | 8 |
При первом вызове delete_tree (на верхнем уровне рекурсии), right и left присваиваются значения и после того как выполнится строка delete_tree(right); т.е. будет удаленно правое поддрево, переменная left уже не будет содержать прежнего значения и здесь: delete_tree(left); left будет указывать не на левое поддрево, а на что-то другое.
0
|
10 / 10 / 2
Регистрация: 25.05.2010
Сообщений: 52
|
|
17.09.2011, 12:08 [ТС] | 9 |
0
|
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
|
|
17.09.2011, 12:11 | 10 |
Потому что переменные статические, и все рекурсивные вызовы delete_tree работают с одними и теми же переменными.
1
|
10 / 10 / 2
Регистрация: 25.05.2010
Сообщений: 52
|
|
17.09.2011, 12:15 [ТС] | 11 |
Net_Wanderer, большое спасибо, наконец то до меня дошло. А можете предложить свой вариант решения проблемы? Использовать локальные переменные?
0
|
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
|
|
17.09.2011, 12:39 | 12 |
Да, вот ещё не плохая статья про деревья http://algolist.manual.ru/ds/btree.php.
1
|
17.09.2011, 12:39 | |
17.09.2011, 12:39 | |
Помогаю со студенческими работами здесь
12
Статические переменные и функции В каком сегменте хранятся статические переменные? Статические переменные в классе не сохраняют заданное им значение Найти S слов, наиболее часто встречающиеся в тексте (использовать статические переменные) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |