Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для JamesBlack
46 / 46 / 5
Регистрация: 28.07.2009
Сообщений: 144

Вылетает при удалении памяти

23.12.2009, 01:44. Показов 1931. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня тут конфуз:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class InversTree
{
    struct element
    {
        double data;
        element *parent;
        element () {data=0; parent=NULL;}
        element (double num, element* _par=NULL) {data=num; parent=_par;}
    };
    int num_of_leaves;          //кол-во листьев
    element **leaves;           //массив листьев
    int cur_leaf;               //текущий листок
    element *current;           //текущий элемент
public:
    //функции всякие
};
 
InversTree::~InversTree ()
{
    element *tmp, *tmp2;
    for(int i=0; i<num_of_leaves; i++)
    {
        current=leaves[i]->parent;
        delete leaves[i];
        while(current!=NULL)
        {
            tmp = current;
            for(int j=0; j<num_of_leaves; j++)
            {
                if (j==i) continue;
                tmp2=leaves[i];
                while(tmp2->parent!=NULL && tmp2->parent!=tmp)
                    tmp2=tmp2->parent;
                tmp2->parent=NULL;
            }
            current = current->parent;
            delete tmp;
        }
    }
    delete [] leaves;
}
Когда выполняется деструктор, борланд вылетает на рабочий стол. На последней строке - delete [] leaves;

Я вроде и так и сяк для памяти проверки делаю, а хрен!
Подскажите плиз, что не так?

Добавлено через 2 минуты
На всякий случай - это инверсное дерево, т.е. элементы имеют ссылки на родителя. Храним только листья.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2009, 01:44
Ответы с готовыми решениями:

Вылетает программа при удалении элемента вектора
Всех с новым годом, уважаемые киберфорумцы! Сделал я на днях класс Button, который, как и положено, представляет из себя кнопку (работаю...

При удалении элемента из списка вылетает программа
Здравствуйте, помогите, пожалуйста. У меня есть программа по работе с классами и списком (код ниже). Добавление элементов в список и их...

Утечка памяти при удалении
Здравствуйте! Возникла проблема при удалении последнего элемента из двусвязного списка. Вот код, где я добавляю элемент в конец...

11
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
23.12.2009, 01:52
скорее всего деструктор освобождает память которая уже не принадлежит объекту, такое возможно, если он вызывается несколько раз для объекта или кто-то уже освободил память раньше
0
 Аватар для JamesBlack
46 / 46 / 5
Регистрация: 28.07.2009
Сообщений: 144
23.12.2009, 02:07  [ТС]
Я это все знаю прекрасно. НО НЕ ВЫЗЫВАЕТСЯ НИГДЕ БОЛЬШЕ УДАЛЕНИЕ LEAVES!!!

Добавлено через 5 минут
Блин, это кажется глюки борланда. Статистикой выявлено:
у 1 человека (меня) вылетает борланд после каждого завершения проги
у 2го ч-ка вылетает борланд после каждого 2-го завершения проги
у 3го и 4го ч-ка борланд не вылетает даже после 30го завершения
0
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
23.12.2009, 02:20
а ты попробуй писать в консоль, каждый раз когда удаляешь переменную, ее адрес... и ищи потом совпадающие адреса... да-да-да... глюки борланда... и вообще ZOG зверствует.
0
 Аватар для JamesBlack
46 / 46 / 5
Регистрация: 28.07.2009
Сообщений: 144
23.12.2009, 02:27  [ТС]
проблема в том, что переменную leaves я удаляю всего 1 раз! Я создаю 1 объект-дерево, работаю с ним, а в коцне проги вызывается деструктор. И он 1 раз удаляет leaves.

Добавлено через 41 секунду
трассировкой просматривал... Нихрена не понимаю!
0
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
23.12.2009, 02:40
а я вот почему-то понимаю... и ты бы мог это понять, если бы сделал как я сказал...
а вот возьму и не буду тебе говорить, что не так! в конце концов, думать надо головой - раз смог это написать, значит не дурак...

ландо, подсказка: "The function called by a delete expression to deallocate storage for an array of objects"
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
23.12.2009, 02:52
JamesBlack, ты не мог бы выложить полный код?
0
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
23.12.2009, 02:54
да там хватает того куска, что есть)))
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.12.2009, 06:02
C++
1
element **leaves;           //массив листьев
да, где выделение памяти для него ?

C++
1
2
3
public:
    //функции всякие
};
видимо, тут
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.12.2009, 06:15
Если у тебя массив, то внем надо
C++
1
delete [] point;
, а в двумерном
C++
1
delete []point[i];
. Коме того, класс с членами-указателями в обязательном порядке имеет явный конструктор, в котором или выделяется память по этим указателям, или в них пишется NULL, при уменьшении числа элементов в динамическом массиве надо проверять, сколько осталось и если 0 - то delete с последующим присваиванием NULL, а перед любым делитом надо поверять значение указателя и выполнять делит только если не NULL.
0
paladin
 Аватар для Yurii_74
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
23.12.2009, 07:42
C++
1
2
3
delete leaves[i];
...
tmp2 = leaves[i];
это как? Поди туда, не знаю куда, верни то, не знаю что?
2
 Аватар для JamesBlack
46 / 46 / 5
Регистрация: 28.07.2009
Сообщений: 144
23.12.2009, 14:14  [ТС]
Цитата Сообщение от Yurii_74 Посмотреть сообщение
C++
1
2
3
delete leaves[i];
...
tmp2 = leaves[i];
это как? Поди туда, не знаю куда, верни то, не знаю что?
ЧЕРТ!!!!
ВОТ ОНО!!!!

tmp2=leaves[i];

Я ПЕРЕПУТАЛ СЧЕТЧИК, ТАМ j ДОЛЖНА БЫТЬ!!! Пристрелите меня!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2009, 14:14
Помогаю со студенческими работами здесь

Освобождение памяти при удалении структуры
Есть структура с указателем на блок памяти, если удалить структуру,память внутри структуры освободится или же надо освободить память внутри...

Ошибка при удалении динамически выделенной памяти
Добрый день, хочу удалить выделенный массив, но выдает ошибку. Вот собственно код создаваемой функции. using namespace std; void...

Ошибка с delete при удалении памяти из-под строки
strngbad.h // strngbad.h -- flawed string class definition #include &lt;iostream&gt; #ifndef STRNGBAD_H_ #define STRNGBAD_H_ class...

Программа вылетает при выделении памяти классу
Программа вылетает при выделении памяти классу и удаления ее.Использую CodeBlocks buffer::buffer() { buf = new buffer; } ...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб?
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru