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

Динамическая память - не могу разобраться! - C++

Восстановить пароль Регистрация
 
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
02.03.2013, 23:56     Динамическая память - не могу разобраться! #1
Пишу библиотеку для односвязного списка. Решил реализовать operator+ , который возвращает list как обьединение двух других.
Все работает, но есть большой вопрос : Я выделил динамически память здесь : list *l = new list;
вопрос мой в том, удалиться ли лист l каким-то образом из памяти, или будет засорять дин. память?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
list operator+ (list& x) {
        node *px = x.head;
        list *l = new list;
        list *p = this;
        while (p->head != nullptr){
            l->push_back(p->head->val);
            p->head = p->head->next;
        }
        while (px != nullptr){
            l->push_back(px->val);
            px = px->next;
        }
        return *l;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2013, 23:56     Динамическая память - не могу разобраться!
Посмотрите здесь:

C++ Динамическая память
Динамическая память C++
Динамическая память C++
C++ динамическая память....
C++ Динамическая память
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11824 / 6803 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
03.03.2013, 00:01     Динамическая память - не могу разобраться! #2
Цитата Сообщение от _Ант_ Посмотреть сообщение
или будет засорять дин. память?
будет засорять.
ReasonX7
 Аватар для ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 146
03.03.2013, 00:01     Динамическая память - не могу разобраться! #3
Освобождение памяти осуществляется так:
C++
1
delete[] list;
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
03.03.2013, 00:03     Динамическая память - не могу разобраться! #4
Объединение списков - это О(1) операция. Достаточно голову одного списка связать с хвостом другого. А у тебя получилось О(mn) (n, m размеры списков) и вообще в коде что-то странное, это сводит на нет все достоинства списка.
Цитата Сообщение от _Ант_ Посмотреть сообщение
удалиться ли лист l каким-то образом из памяти, или будет засорять дин. память?
будет утечка памяти.

Добавлено через 40 секунд
Цитата Сообщение от _Ант_ Посмотреть сообщение
Решил реализовать operator+ , который возвращает list как обьединение двух других.
А, понял почему все так сложно, сразу не обратил внимание)
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 00:03  [ТС]     Динамическая память - не могу разобраться! #5
а как я удалю этот новый лист, ведь я не могу его удалить в функции, а из
функции main нету доступа к этому листу, насколько я понимаю!
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
03.03.2013, 00:05     Динамическая память - не могу разобраться! #6
создавай объект на стеке, все равно по значению возвращаешь, тогда утечки не будет.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11824 / 6803 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
03.03.2013, 00:07     Динамическая память - не могу разобраться! #7
Цитата Сообщение от _Ант_ Посмотреть сообщение
а как я удалю этот новый лист, ведь я не могу его удалить в функции
создавайте на стеке объект. После этого он будет скопирован в возвращаемое значение и освобожден.

Добавлено через 28 секунд

Не по теме:

Цитата Сообщение от ReasonX7 Посмотреть сообщение
C++
1
delete[] list;

_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 01:38  [ТС]     Динамическая память - не могу разобраться! #8
создавайте на стеке объект. После этого он будет скопирован в возвращаемое значение и освобожден.
можете подробнее? что такое "оздавайте на стеке объект"?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11824 / 6803 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
03.03.2013, 01:52     Динамическая память - не могу разобраться! #9
C++
1
list myvar;
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 03:14  [ТС]     Динамическая память - не могу разобраться! #10
list myvar;
это талант - объяснять, дано далеко не всем..
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11824 / 6803 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
03.03.2013, 04:14     Динамическая память - не могу разобраться! #11
так понятнее:
C++
1
2
int i;//На "стеке"
int *p=new int;//В куче
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 13:29  [ТС]     Динамическая память - не могу разобраться! #12
int i;//На "стеке"
int *p=new int;//В куче
Если чесно, нет((
я не понимаю, - это вы в функции задаете значения или где?
И где тогда ставить оператор делит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 13:34     Динамическая память - не могу разобраться!
Еще ссылки по теме:

Динамическая память C++
Динамическая память C++

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.03.2013, 13:34     Динамическая память - не могу разобраться! #13
Естественно, в функции. Или где там вам надо создать список.

delete ставить там, где вам надо удалить список. Если у вас нет к нему доступа — дайте.
Yandex
Объявления
03.03.2013, 13:34     Динамическая память - не могу разобраться!
Ответ Создать тему
Опции темы

Текущее время: 13:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru