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

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

Войти
Регистрация
Восстановить пароль
 
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
#1

Почему течет память ? - C++

05.07.2015, 08:36. Просмотров 455. Ответов 9
Метки нет (Все метки)

пишу небольшой класс по работе с двусвязными списками


Не по теме:


часть класса

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
List::List()
{
    
    head = nullptr;
    tail = nullptr;
}
 
void List::Add(int data){
    //item * newnode = new item;
    //newnode->data = data;
    if (head == nullptr)
    {
        //newnode->next = newnode;
        //newnode->prev = newnode;
        /*head = newnode;
        tail = head;
        tail->next = head;
        tail->prev = head;*/
        head = new item();
        head->data = data;
        head->next = head;
        head->prev = head;
        tail = head;
        std::cout << "head = " << data << std::endl;
    }
}
сама структура item
C++
1
2
3
4
5
struct item{
    int data;
    item* next = nullptr;
    item* prev = nullptr;
};
в main пишу
C++
1
2
3
    auto a = new List();
    
    a->Add(123);



в итоге получаю утекчку памяти :\
0
Миниатюры
Почему течет память ?  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2015, 08:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему течет память ? (C++):

Почему память массива не освобождается? - C++
В выводе *b должна быть ересь, но на самом деле коректно выводит цифру &quot;3&quot;. #include &lt;iostream&gt; using namespace std; void func(int...

Ругается на деструктор (выделял динамически память). Почему? - C++
Вот код: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; class MClass { private: int...

Почему не очищает память, выделенную под массив структур - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; const int ar_size=20; struct CandyBar { char name; double...

Почему не получается освободить память, выделенную для переменных в структуре? - C++
не получается освободить память, выделенную для переменных в структуре. Помогите пожалуйста, код ниже. #include &lt;iostream&gt; #include...

С++ течет при наследовании - C++
Если был создан класс где его поля размещались в стеке (Foo) и унаследован классом (Foo1) который создается динамически. Как...

Почему указатель теряет свои значения после выхода с метода, память выделена динамически - C++
#include &lt;iostream&gt; using namespace std; void sqr( int* a, int length ); int main() { int *a = new int; int length =...

9
Rius
Эксперт .NET
3066 / 2115 / 501
Регистрация: 25.05.2015
Сообщений: 6,880
Записей в блоге: 9
Завершенные тесты: 4
05.07.2015, 08:43 #2
Деструктор пропишите.
0
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
05.07.2015, 09:41  [ТС] #3
Rius, я правильо понимаю что деструктор выглядит примерно так ?
C++
1
2
while (head->next != tail){ delete head; head = head->next; }
    delete tail;
0
Rius
Эксперт .NET
3066 / 2115 / 501
Регистрация: 25.05.2015
Сообщений: 6,880
Записей в блоге: 9
Завершенные тесты: 4
05.07.2015, 18:29 #4
М.б. так
C++
1
2
3
4
5
6
7
8
List::~List()
{
  while (head != nullptr) {
    item *del = head;
    head = head->next;
    delete del;
  }
}
1
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
06.07.2015, 11:13  [ТС] #5
Rius,

Не по теме:

можете глянуть код ? я не могу понять почему до сих пор течет память

0
Вложения
Тип файла: 7z lab7.7z (1.33 Мб, 2 просмотров)
Rius
Эксперт .NET
3066 / 2115 / 501
Регистрация: 25.05.2015
Сообщений: 6,880
Записей в блоге: 9
Завершенные тесты: 4
06.07.2015, 13:41 #6
Ловите pull request
0
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
06.07.2015, 17:54  [ТС] #7
Rius, откуда ? )
0
Rius
Эксперт .NET
3066 / 2115 / 501
Регистрация: 25.05.2015
Сообщений: 6,880
Записей в блоге: 9
Завершенные тесты: 4
06.07.2015, 18:43 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
На github, вестимо. В вашем репозитории.

Добавлено через 21 минуту
theTLDLinkedList
1
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
06.07.2015, 19:13  [ТС] #9
Rius, я так понимаю основная проблема была в не написании конструктора для структуры Item?
0
Rius
Эксперт .NET
3066 / 2115 / 501
Регистрация: 25.05.2015
Сообщений: 6,880
Записей в блоге: 9
Завершенные тесты: 4
06.07.2015, 19:14 #10
Да. Смотрите всё коммиты по порядку.
У вас почему-то проверка на tail == head, что типично для кольцевых буферов. А тут связанный список.
0
06.07.2015, 19:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 19:14
Привет! Вот еще темы с ответами:

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

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? - C++
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По непонятным для меня причинам этот код...

Почему выводится в виде таблицы и почему не работает сортировка - C++
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы комнат? hotel.h #include...

IDE wxDev-C++, при создании кнопки на форме она почему-то становится во весь экран, почему? - C++
То есть ребята не смешно ни разу. Создаю форму, кидаю кнопку, ничего не предвещает плохого. Собираю проект, запускаю- и вот кнопка размером...


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

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

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