Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
#1

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

02.03.2013, 23:56. Просмотров 392. Ответов 12
Метки нет (Все метки)

Пишу библиотеку для односвязного списка. Решил реализовать 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;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2013, 23:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамическая память - не могу разобраться! (C++):

Статическая память,Динамическая память. - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

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

Динамическая память. - C++
Всем привет! Уважаемые знатоки, можете посмотреть мою реализацию класса вектор? У меня при их большем количестве в программе вечно...

Динамическая память - C++
Создать одномерный массив в котором хранятся года рождения людей (года вводятся в массив в ручную, размер массива не менее 5). Определить...

Динамическая память - C++
Как создать массив A через динамическую память ???

Динамическая память - C++
Добрый вечер! Возникла у меня такая проблемка, нужно от статической памяти перейти к динамической. То ли уже голова не варит, то ли руки не...

12
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
03.03.2013, 00:01 #2
Цитата Сообщение от _Ант_ Посмотреть сообщение
или будет засорять дин. память?
будет засорять.
0
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
03.03.2013, 00:01 #3
Освобождение памяти осуществляется так:
C++
1
delete[] list;
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
03.03.2013, 00:03 #4
Объединение списков - это О(1) операция. Достаточно голову одного списка связать с хвостом другого. А у тебя получилось О(mn) (n, m размеры списков) и вообще в коде что-то странное, это сводит на нет все достоинства списка.
Цитата Сообщение от _Ант_ Посмотреть сообщение
удалиться ли лист l каким-то образом из памяти, или будет засорять дин. память?
будет утечка памяти.

Добавлено через 40 секунд
Цитата Сообщение от _Ант_ Посмотреть сообщение
Решил реализовать operator+ , который возвращает list как обьединение двух других.
А, понял почему все так сложно, сразу не обратил внимание)
0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 00:03  [ТС] #5
а как я удалю этот новый лист, ведь я не могу его удалить в функции, а из
функции main нету доступа к этому листу, насколько я понимаю!
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
03.03.2013, 00:05 #6
создавай объект на стеке, все равно по значению возвращаешь, тогда утечки не будет.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
03.03.2013, 00:07 #7
Цитата Сообщение от _Ант_ Посмотреть сообщение
а как я удалю этот новый лист, ведь я не могу его удалить в функции
создавайте на стеке объект. После этого он будет скопирован в возвращаемое значение и освобожден.

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

Не по теме:

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

0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 01:38  [ТС] #8
создавайте на стеке объект. После этого он будет скопирован в возвращаемое значение и освобожден.
можете подробнее? что такое "оздавайте на стеке объект"?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
03.03.2013, 01:52 #9
C++
1
list myvar;
0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 03:14  [ТС] #10
list myvar;
это талант - объяснять, дано далеко не всем..
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
03.03.2013, 04:14 #11
так понятнее:
C++
1
2
int i;//На "стеке"
int *p=new int;//В куче
0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
03.03.2013, 13:29  [ТС] #12
int i;//На "стеке"
int *p=new int;//В куче
Если чесно, нет((
я не понимаю, - это вы в функции задаете значения или где?
И где тогда ставить оператор делит?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.03.2013, 13:34 #13
Естественно, в функции. Или где там вам надо создать список.

delete ставить там, где вам надо удалить список. Если у вас нет к нему доступа — дайте.
0
03.03.2013, 13:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 13:34
Привет! Вот еще темы с ответами:

Динамическая память [new] - C++
Если записать так: char *p; p = new char; cin>>p; for(int i=0; i<strlen(p); i++) cout<<p<<endl;

Динамическая память с++ - C++
Как использовать динамическую память в с++

Динамическая память - C++
в чем ошибка #include <iostream> #include "conio.h" using namespace std; class{A int a; double b; char s; }

Динамическая память - C++
Дано натуральное число n и целые числа{a}_{1},{a}_{2},...,{a}_{n}. Выяснить, есть ли среди цифр {a}_{1},{a}_{2},...,{a}_{n}совпадающие и...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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