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

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

23.12.2009, 01:44. Показов 1875. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru