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

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

Войти
Регистрация
Восстановить пароль
 
Я-Лис
29 / 64 / 13
Регистрация: 10.05.2011
Сообщений: 173
#1

Есть ли утечка памяти? - C++

28.04.2012, 12:16. Просмотров 698. Ответов 11
Метки нет (Все метки)

Пример добавления элемента в список.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 // Включение в список нового компонента
void comp_in(dyn_list &l, char* n, char* v)
{
    comp* c = new comp();
    strcpy_s(c->name, 20, n);
    strcpy_s(c->value, 10, v);
    c->next = NULL;
    if (chk_empty(l))
        l.head = c;
    else
        l.tail->next = c;
    l.tail = c;
}
Будет ли утечка памяти, если я не уничтожаю переменную c вручную? Или она автоматически уничтожится при выходе из функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2012, 12:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть ли утечка памяти? (C++):

Есть ли утечка памяти в list - C++
Здравствуйте, форумчане, есть вопрос насчет освобождения памяти в list, каждый элемент которого представлен структурой.Хотел узнать...

Есть ли утечка памяти в этом случае? - C++
_Доброго денёчка всем. Прохожу тему на указатели и ссылки. Делаю упражнение на тему "написать программу, вызывающую утечку памяти". Смысл...

Есть ли утечка памяти в проекте? И как можно это перепроверять? - C++
#include "stdafx.h" #include <iostream> using namespace std; class MyArray { int *ptrarray; //массив ...

Утечка памяти - C++
Здравствуйте! Я пишу длинную арифметику для целых чисел. Ниже - функция произведения чисел X и Y. Вопрос: произойдет ли утечка памяти, и...

Утечка памяти в - C++
Кто подскажет плиз. Тут у меня утечка памяти foreach (var file in xpsFiles) { ...

Утечка памяти - C++
Доброго времени суток. Написал оконное приложение. Столкнулся с проблемой - утекает память. Какие есть средства, чтобы определить,...

11
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
28.04.2012, 12:21 #2
Если каждый объект c не удалять вручную, то все они будут моментально разрушены после
окончания выполнения программы. Утечки памяти НЕ будет (см. ниже).
1
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
28.04.2012, 12:23 #3
В данном фрагменте кода - НЕ будет.
1
Я-Лис
29 / 64 / 13
Регистрация: 10.05.2011
Сообщений: 173
28.04.2012, 12:40  [ТС] #4
А если программа еще не завершается? Т.е. если я несколько раз вызову функцию, а программу я не завершаю, я так понял у меня каждый раз будет выделяться новая переменная с и все они останутся висеть в памяти (пока не завершу программу), так или нет?
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
28.04.2012, 12:41 #5
ДАААААААА!!!!!!, конечно!
0
Я-Лис
29 / 64 / 13
Регистрация: 10.05.2011
Сообщений: 173
28.04.2012, 12:43  [ТС] #6
zitxbit, =). Значит будем удалять.
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
28.04.2012, 12:48 #7
А вот при удалении указателей при помощи напр., delete[] с, может возникнуть утечка памяти.
Хотя в д.с. это мало вероятно, поскольку удаляется не указатель с нач. адресом буфера, а
объект класса. Также я бы порекомендовал создать для класса Comp деструктор, который
будет вызываться моментально после delete c, в нем и реализовать "уборщик мусора" для
объекта с которого требуется удалить.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
28.04.2012, 12:50 #8
Здесь c удалять нельзя. Программа перестанет работать.
1
andy_111
90 / 59 / 2
Регистрация: 03.07.2011
Сообщений: 148
28.04.2012, 12:52 #9
А что вы называете утечкой памяти? Давайте определимся. У Вас есть список указателей на структуры типа comp (переменная dyn_list). Вы динамически создаете структуру типа comp - то есть под нее операцией new выделяете память. До тех пор, пока Вы не сделаете delete для динамически созданной переменной типа comp, она будет занимать память. Память будет занята вне зависимости от того, в какой функции произошел вызов функции new. Автоматически ничего не очистится, операция delete сама собой не вызовется! При выходе из программы - другое дело, кончено, там освободится все
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
28.04.2012, 12:55 #10
Цитата Сообщение от Я-Лис Посмотреть сообщение
Пример добавления элемента в список.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 // Включение в список нового компонента
void comp_in(dyn_list &l, char* n, char* v)
{
    comp* c = new comp();
    strcpy_s(c->name, 20, n);
    strcpy_s(c->value, 10, v);
    c->next = NULL;
    if (chk_empty(l))
        l.head = c;
    else
        l.tail->next = c;
    l.tail = c;
}
Будет ли утечка памяти, если я не уничтожаю переменную c вручную? Или она автоматически уничтожится при выходе из функции?
при выходе из функции изчезнет только pointer c, который располагается в стеке. а объект останется жить в heap, где ему была выделена память. логично удалить объекты, на которые указывают элементы списка dyn_list в деструкторе dyn_list.
конечно, если логика программы не требует, чтобы они (или некоторые из них) жили дальше.
1
Я-Лис
29 / 64 / 13
Регистрация: 10.05.2011
Сообщений: 173
28.04.2012, 13:06  [ТС] #11
andy_111, это я и имел ввиду.

ForEveR, не понял, почему перестанет работать.

Добавлено через 1 минуту
Просто я список сделал не через класс, а через структуру.

Добавлено через 4 минуты
Ааааа, кажется понял. Я тупанул, действительно нельзя удалять.

Добавлено через 4 минуты
Объекты они же мне еще пригодятся.=)
В начале просто возник вопрос именно в том будут ли уничтожаться динамические переменные при выходе из функции (или блока).

А удалять не надо, т.к. мне еще с ними работать. Что -то я ступил.

Всем спасибо!
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
28.04.2012, 13:07 #12
Я-Лис, И что? Отличий в С++ структуры от класса практически нет. Деструктор в структуре и не париться.
0
28.04.2012, 13:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2012, 13:07
Привет! Вот еще темы с ответами:

Утечка памяти - C++
Взял листинг кода из книги Стивен Прата Язык программирования С++. Меня терзают смутные сомнения нет ли здесь утечки памяти, указатель ...

утечка памяти - C++
Может кто-то проверить есть ли здесь утечка памяти? Мне почему-то кажется что есть. В задачи нужно когда пользователь сделал операции...

Утечка памяти - C++
Помогите с кодом, вот написал реализацию стека по заданию. Преподаватель попросил проверить, верно ли я использую delete, ибо mas в классе...

Утечка памяти - C++
Либо я себе мозг запудрила, либо помогите мне :) есть у меня вектор vector<char*> names_variable; дополняю его таким образом ...


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

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

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