2 / 2 / 0
Регистрация: 04.02.2013
Сообщений: 92
1

Что считать утечкой памяти?

20.06.2015, 16:05. Показов 2078. Ответов 65
Метки нет (Все метки)

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
class A
{
public:
    A() { cout << "create A" << endl; };
    ~A() { cout << "delete A" << endl; };
     void func(){ cout << "func A" << endl; };
 
private:
 
};
 
class B :public A
{
public:
    B() { cout << "create B" << endl; };
    ~B() { cout << "delete B" << endl; };
     void func(){ cout << "func B" << endl; };
 
private:
 
};
 
void main()
{
 
    A *a_ptr = new A;
    B b;
 
    a_ptr = &b;
 
    a_ptr->func();
}
 Комментарий модератора 

Выделил новую тему отсюда, т.к. оффтоп.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2015, 16:05
Ответы с готовыми решениями:

Как бороться с утечкой памяти?
Добрый день! у меня такая проблема: в моей программе видимо где-то проблемы с утечкой памяти. если...

Не могу справиться с утечкой памяти TChromium
Добрый день Нужна помощь, пишу примитивный браузер на d2010 с использованием TChromium у меня...

Как справиться с утечкой памяти в коде?
Есть вот такая форма internal partial class FindDialogForm&lt;T&gt; : XtraForm { public...

Является ли данный случай утечкой памяти?
Имеется программа, написанная на языке СИ с использованием граф. библиотеки GTK+. Запуск и...

65
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2015, 20:16 2
Цитата Сообщение от ritmix10 Посмотреть сообщение
C++
1
2
3
4
5
6
7
void main() 
{ 
    A *a_ptr = new A; 
    B b; 
    a_ptr = &b; 
    a_ptr->func(); 
}

Не по теме:

P.S. У тебя в коде утечка памяти.

0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
20.06.2015, 20:44 3
Цитата Сообщение от Tulosba Посмотреть сообщение
P.S. А ещё у тебя в коде утечка памяти.

Не по теме:

ложь.

0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.06.2015, 20:48 4
Если полагать, что вся память выделенная процессом освобождается при выходе из него, тогда можно сделать заключение что утечек памяти вообще не бывает.
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
20.06.2015, 20:55 5
Цитата Сообщение от castaway Посмотреть сообщение
Если полагать, что вся память выделенная процессом освобождается при выходе из него, тогда можно сделать заключение что утечек памяти вообще не бывает.
утечка есть неконтролируемая утеря ресурсов.

если ваше приложение теряет ресурсы, и не контролирует эту ситуацию - оно допускает утечку.
если ваше приложение контролирует процедуру освобождения ресурсов - оно не допускает утечку.

в представленом выше коде утечки ресурсов нет.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.06.2015, 21:02 6
Согласен, но
Цитата Сообщение от hoggy Посмотреть сообщение
в представленом выше коде утечки ресурсов нет.
в предоставленном выше коде я всё же не вижу контроля за освобождением ресурсов.
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
20.06.2015, 21:05 7
Цитата Сообщение от castaway Посмотреть сообщение
в предоставленном выше коде я всё же не вижу контроля за освобождением ресурсов.
в неправильно мыслите.

в представленом выше коде вы не видите факта утери ресурсов.
но видите факт освобождения ресурса операционной системой.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2015, 21:07 8
hoggy, после 30 строки объект, выделенный в 27 строке не доступен. Это утечка.
0
2548 / 1207 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
20.06.2015, 21:07 9
Началась философия "Когда вы поймете, что вы ничего не контролируете в этой жизне - только тогда вы обретёте свободу" (с) фильм "Парк Юрского Периода 2015"
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.06.2015, 21:12 10
Продолжение философии: "Лишь утратив всё до конца, мы обретаем свободу." - \\ К/ф "Бойцовский Клуб"
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
20.06.2015, 21:17 11
Цитата Сообщение от Tulosba Посмотреть сообщение
hoggy, после 30 строки объект, выделенный в 27 строке не доступен. Это утечка.
действительно, объект теряется.

однако, сам алгоритм функции майн подсказывает:
это не имеет значения, потому что указатель никак не переиспользуется.
27 строку можно было бы заменить:

C++
1
A *a_ptr = nullptr;
смысл бы не изменился ни на йоту.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2015, 21:24 12
hoggy, ты забываешь о побочных эффектах от вызова конструктора. В частности, выделение памяти и вывод сообщения на консоль.
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
20.06.2015, 21:30 13
Цитата Сообщение от Tulosba Посмотреть сообщение
hoggy, ты забываешь о побочных эффектах от вызова конструктора. В частности, выделение памяти и вывод сообщения на консоль.
не забываю.
в данном случае эти побочные ээфекты - часть нормального хода программы.

я ещё раз повторюсь: только неконтролируемая утечка ресурсов явлояется утечкой ресурсов.
контролируемая - уже не утечка, а часть штатной работы.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.06.2015, 21:32 14
Не то чтобы придираюсь, просто
Цитата Сообщение от hoggy Посмотреть сообщение
только неконтролируемая утечка ресурсов явлояется утечкой ресурсов.
звучит как-то рекурсивно
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
20.06.2015, 21:36 15
Цитата Сообщение от castaway Посмотреть сообщение
звучит как-то рекурсивно
контролируемая утечка не является утечкой.

вас что-то смущает?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.06.2015, 01:47 16
Цитата Сообщение от hoggy Посмотреть сообщение
контролируемая утечка не является утечкой.
Контролируемая утечка? Откуда ты вообще откопал этот термин?
Утечка памяти по определению есть невозможность обратиться к объекту, который всё ещё находится в памяти.
Создал в куче объект, профукал его адрес, всё, утечка. Без вариантов.
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
21.06.2015, 11:11 17
Цитата Сообщение от Tulosba Посмотреть сообщение
Откуда ты вообще откопал этот термин?
это - не термин.
это - словосочетание.
которое нужно понимать в его обывательском смысле.

"контролируемая утечка" - по факту ресурс утекает.
но об этом знают. это было допущено сознательно.

Цитата Сообщение от Tulosba Посмотреть сообщение
профукал его адрес, всё, утечка. Без вариантов.
утечка - неконтролируемая утеря ресурсов.

я забил на объект, который мне просто не нужен.
мне наплевать на эти несколько байт памяти,
которые через мгновение зачистит система.

это - осознанный сценарий действий для какого то конкретного хэлловорлда.
и это - не утечка.

вот когда программисты не в курсе ни о факте утери ресурсов,
ни о причинах, но в то же время ими предполагается,
что ничего теряться не должно - вот тогда это уже утечка:
неконтролируемая утеря ресурсов.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.06.2015, 11:55 18
Цитата Сообщение от hoggy Посмотреть сообщение
это - не термин.
это - словосочетание.
Ох.
Цитата Сообщение от hoggy Посмотреть сообщение
но об этом знают. это было допущено сознательно.
ТС про механизм виртуальных функций не знает, а ты про какую-то сознательность в работе с ресурсами рассказываешь. Смешно, ей богу.
Цитата Сообщение от hoggy Посмотреть сообщение
которые через мгновение зачистит система.
Про "freestanding implementations" слышал? Может вообще не быть никакой ОС, которая за тебя при выходе память освобождает.
Цитата Сообщение от hoggy Посмотреть сообщение
это - осознанный сценарий действий для какого то конкретного хэлловорлда.
Нет абсолютно никакой разницы: создал ли ты условия для утечки осознанно или нет.
Есть факт - утечка памяти.
Важность последствий для тебя лично или кого-то другого не влияет на случившийся факт.
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
21.06.2015, 13:03 19
Цитата Сообщение от Tulosba Посмотреть сообщение
Ох.
не нужно вырывать из контекста.
читайте до конца:

Цитата Сообщение от hoggy Посмотреть сообщение
это - словосочетание.
которое нужно понимать в его обывательском смысле.

Цитата Сообщение от Tulosba Посмотреть сообщение
Может вообще не быть никакой ОС, которая за тебя при выходе память освобождает.
если это будет нужно - программист напишит код,
который проконтролирует освобождение ресурса.

ключевая фраза "если будет нужно".

Цитата Сообщение от Tulosba Посмотреть сообщение
Нет абсолютно никакой разницы: создал ли ты условия для утечки осознанно или нет.
Есть факт - утечка памяти.
Важность последствий для тебя лично или кого-то другого не влияет на случившийся факт.
в том о и дело, что разница есть, и она принципиальна.

зачем мы держим адрес объекта?
что бы не потерять сам объект,
что бы иметь возможность зачистить его.

в другой ситуации мы не держим адреса объекта,
потому что мы не боимся его потерять,
потому что его зачистит система, и мы это знаем.
мы изначально на это и рассчитываем.

в обоих случаях нет никаких утечек.
есть разные стратегии зачистки.

Добавлено через 2 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
ТС про механизм виртуальных функций не знает, а ты про какую-то сознательность в работе с ресурсами рассказываешь. Смешно, ей богу.

я исходил не из знаний ТС.
а от исходного кода.

в конкретном хэлловорлде объект теряется.
но в данном случае на это можно забить.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.06.2015, 13:24 20
Цитата Сообщение от hoggy Посмотреть сообщение
но в данном случае на это можно забить.
Забить можно. Но это всё равно утечка. Что же ты непонятливый-то такой?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2015, 13:24
Помогаю со студенческими работами здесь

Когда исправят баг с утечкой памяти в Rhythmbox?
В Ubuntu 12.04 x64 есть утечка памяти в Rhythmbox, мегабайт на 1 песню примерно... Исправлен ли...

Setjmp, longjmp, malloc - как бороться с утечкой памяти
Здравствуйте! Вот небольшой тестовый пример, в котором, как я понимаю, free(buf) никогда не...

Как бороться с утечкой памяти в приложении при его длительной работе
Всем доброго времени суток. Началось все с того, что после недельной бесперерывной работы...

Считать изображения из памяти
Новичок в андроиде Собственно задача состоит в том что бы считать из памяти телефона все...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru