Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
2 / 2 / 0
Регистрация: 04.02.2013
Сообщений: 92

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

20.06.2015, 16:05. Показов 3502. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2015, 16:05
Ответы с готовыми решениями:

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

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

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

65
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.06.2015, 22:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
ключевое слово "забытый".
Так компилятор-то не знает, забыли его, или явно не написали. И профайлер не знает, и ещё много кто.
В том числе тот, кто код смотрит, если явно в комментарии не будет указано. Об этом я и талдычу всю тему.
Важность не важна (о, как), важен сам факт.
Цитата Сообщение от hoggy Посмотреть сообщение
вот если его нету - тогда это уже другой разговор.
Мы тут C++ обсуждаем, а не ОС всё-таки. Как уже говорил castaway:
Цитата Сообщение от castaway Посмотреть сообщение
Если полагать, что вся память выделенная процессом освобождается при выходе из него, тогда можно сделать заключение что утечек памяти вообще не бывает.
0
21.06.2015, 22:46

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
А я уже хотел жаловаться на баг в скипте , у меня двойной вариант рисует
Не торопись радоваться, сейчас другой админ тему прочтёт, не заметит что добавили кнопку, у тебя третья появится:D

0
21.06.2015, 23:06

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Если включили, то это круто, и юзерскрипт я конечно тогда отключу.
у меня нормально выводит :)

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.06.2015, 23:11
Цитата Сообщение от Tulosba Посмотреть сообщение
Так компилятор-то не знает, забыли его, или явно не написали. И профайлер не знает, и ещё много кто.
программист знает.
код пишет программист.

простой пример: профайлеры любят агриццо на статические сингелтоны.
и чо? у нас тут утечка, только потому что так сказал профайлер?


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

алгоритмически - были утечки, пул надрывался,
пытаясь запросить дополнительную память.
но профайлеры ничего не заметили,
потому что они не умеют пул.

с их точки зрения все хорошо: пул взял, пул вернул.
а то что он был забит дохляками через new placement ...

я вам ещё раз делаю замечание:
вы придираетесь к форме, не учитывая содержание.

Цитата Сообщение от Tulosba Посмотреть сообщение
Мы тут C++ обсуждаем, а не ОС всё-таки. Как уже говорил castaway:
Если полагать, что вся память выделенная процессом освобождается при выходе из него, тогда можно сделать заключение что утечек памяти вообще не бывает (с).
в корне не верная мысль.

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

чем чреваты утечки ресурсов? (даже не памяти, а вообще ресурсов).
приложение жрет неимоверно, и работает не стабильно.
и само может крякнуть, и систему нагнуть.

вот если оно зажирает стабильно и ожидаемо,
работает тоже стабильно, не крякает,
и системе стрессов не устраивает - какие проблемы тогда?
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
21.06.2015, 23:37
Цитата Сообщение от hoggy Посмотреть сообщение
могу только призвать к здравому смыслу.
Ну то есть вы это просто придумали. Почитайте, что подразумевается всеми программистами под утечками памяти, без всякой отсебятины: http://accu.org/index.php/journals/1936. Там аж 3 определения, но именно вашего среди них нету, что вполне ожидаемо.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.06.2015, 23:56
Цитата Сообщение от ct0r Посмотреть сообщение
Ну то есть вы это просто придумали.
я это не придумывал.

на то оно и здравый смысл:

C++
1
2
3
4
5
6
7
void main()
{
    A *a_ptr = new A;
    B b;
    a_ptr = &b;
    a_ptr->func();
}
здесь нет утери ресурсов.
придожение работает стабильно.
и жрет тоже стабильно и ожидаемо.

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

во-вторых, в статье есть мысли,
смысл которых ну очень похожи на то,
что я называю "здравым смыслом".

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

Добавлено через 2 минуты
Цитата Сообщение от ct0r Посмотреть сообщение
но именно вашего среди них нету, что вполне ожидаемо.
самое первое.

впрочем, последний абзац особенно доставляет,
как в общем то и вся статья.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
22.06.2015, 00:13
Цитата Сообщение от hoggy Посмотреть сообщение
я это не придумывал.
А кто придумал? Ваш здравый смысл придумал?

Цитата Сообщение от hoggy Посмотреть сообщение
источник ни разу не авторитетный.
Ага-ага Всяко поавторитетнее слов некоторых других А может еще заглянем сюда? https://msdn.microsoft.com/en-... 59408.aspx

Цитата Сообщение от hoggy Посмотреть сообщение
самое первое.
Не смешите. Если даже выкинуть из ваших слов всю чушь с контролируемым/неконтролируемым и зависимостью от требований, ваше определение кратко звучит так - работает предсказуемо и нас устраивает - значит и утечек нет. Ничего общего с тем определением, которое говорит о том, что утечка - это когда есть память, которая не используется с пользой, тут нету.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
22.06.2015, 00:30
Цитата Сообщение от ct0r Посмотреть сообщение
А может еще заглянем сюда? https://msdn.microsoft.com/en-... 59408.aspx
это так же не противореччит моим тезисам.

можно ещё отсюда:
https://ru.wikipedia.org/wiki/... 1%82%D0%B8

и это тоже никак не противоречит моим тезисам.

представьте себе.

Цитата Сообщение от ct0r Посмотреть сообщение
кратко звучит так - работает предсказуемо и нас устраивает - значит и утечек нет.
"предсказуемо" - ёмкое слово,
оно включает в себя "мы контролируем ресурсы".

Цитата Сообщение от ct0r Посмотреть сообщение
Ничего общего с тем определением, которое говорит о том, что утечка - это когда есть память, которая не используется с пользой, тут нету.
а если мозг включить?

я вас сейчас носом ткну:

смотрите:

C++
1
2
3
4
5
6
7
8
void main()
{
    A *a_ptr = new A; //<--- избыточная аллокация. не несет пользы
        // утечка, скажите вы?
    B b;
    a_ptr = &b;
    a_ptr->func();
}
а если так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void main()
{
    A *a_ptr = new A; //<--- по прежнему избыточная аллокация. 
      // по прежнему не несет никакой пользы
 
    delete a_ptr ; // <--- избыточная деаллокация
     // с таким же успехом, 
     // освобождение ресурсов может осуществить виндовс
 
    B b;
    a_ptr = &b;
    a_ptr->func();
}
ну и что изменилось?
да ничего не изменилось.
смысл в обоих случаях один и тот же.

только в первом случае г_о_в_н_о_к_о_д с одной избыточной строкой.
а во втором - с двумя избыточными строчками.

это не утечки, это просто тупорылый код.


и не нужно заниматься буквоедством : бездумно следовать каким то определениям.
нужно башку тоже иногда включать.

потому что любые такие определения не более, чем формальность.
и как у любой модели, и них есть свои границы применимости.

выше я приводил пример с статическими сингелтонами и кастомным пулом памяти.
где лососнут тунца например, 2 и 3 определение, если вы не научитесь включать голову.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
22.06.2015, 01:06
Цитата Сообщение от hoggy Посмотреть сообщение
это так же не противореччит моим тезисам.
Оно и видно
When an application dynamically allocates memory, and does not free that memory when it is finished using it, that program has a memory leak.
Цитата Сообщение от hoggy Посмотреть сообщение
и не нужно заниматься буквоедством : бездумно следовать каким то определениям.
нужно башку тоже иногда включать.
Ну так включите и перестаньте подсовывать нам еще одно свое, выдавая его за верное.

Цитата Сообщение от hoggy Посмотреть сообщение
это не утечки, это просто тупорылый код.
Нынче утечки в тупорылом коде утечками уже не считаются, понятно
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
22.06.2015, 01:14
Цитата Сообщение от hoggy Посмотреть сообщение
программист знает.
код пишет программист.
немножко меняю программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main()
{
   int i;
cin>>i;
   while(i--)
   {
    A *a_ptr = new A; //<--- избыточная аллокация. не несет пользы
        // утечка, скажите вы?
    B b;
    a_ptr = &b;
    a_ptr->func();
    }
 
}
программист знает, сколько памяти утечет?

мне вот что вспомнилось:
задокументированный "баг", это не "баг", это "фича"
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
22.06.2015, 01:35
Цитата Сообщение от ct0r Посмотреть сообщение
Оно и видно
When an application dynamically allocates memory, and does not free that memory when it is finished using it, that program has a memory leak.
видно, что призыв включить мозг действия не возымел:
статический сингелтон.
он переживает main.
и может держать данные в куче.

поэтому, на него и агряццо различные профайлеры.

я вам ещё раз повторяю: включайте мозг,
и прекращайте бездумно следовать за определениями.
у них у всех есть свои границы применимости.

Цитата Сообщение от ct0r Посмотреть сообщение
Ну так включите и перестаньте подсовывать нам еще одно свое, выдавая его за верное.
я то свою голову и не выключал никогда.
и разделяю зерна от плевел.

а вы даже и не пытаетесь.
я смотрю, вы мне даже возразить по существу никак не можете.

Цитата Сообщение от ct0r Посмотреть сообщение
Нынче утечки в тупорылом коде утечками уже не считаются, понятно
там нет утечки.

я вам привел два варианта кода.
у которых одинаковый смысл.
и практически одинаковое поведение.

и вы мне сейчас не сможете объяснить разницы.

вы мне кидаете какие то определения, навроде этого:
When an application dynamically allocates memory, and does not free that memory when it is finished using it, that program has a memory leak.
но не можете объяснить: почему же тогда эти определения не работают:
кастомный пул захапал сразу немерянно.
тобишь, есть свой аллокатор и все такое.

алгоритмически - были утечки, пул надрывался,
пытаясь запросить дополнительную память.
но профайлеры ничего не заметили,
потому что они не умеют пул.

с их точки зрения все хорошо: пул взял, пул вернул.
а то что он был забит дохляками через new placement ...
или вы всерьёз полагаете, что раз пул честно вернул все,
что запахал по окончанию работы, значит утечек не было?

и не беда, что он сожрал 3 гигабайта, вместо 30 мегабайт.
и ещё поработал бы чутка - упал бы от нехватки памяти на 32 битной оси.

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

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
программист знает, сколько памяти утечет?
нет, не знает.
здесь по прежнему имеет место быть избыточной аллокации.
но теперь она уже не контролируется.
это - утечка.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.06.2015, 13:12
Цитата Сообщение от hoggy Посмотреть сообщение
статический сингелтон.
он переживает main.
и может держать данные в куче.
Если его деструктор вызывается, то утечек нет (при условии, что всё правильно написано). Если деструктор не вызывается, то утечки есть (то, что на них будет наплевать, в большинстве случаев, не отменяет факта их существования).
Цитата Сообщение от hoggy Посмотреть сообщение
раз пул честно вернул все,
что запахал по окончанию работы, значит утечек не было?
Именно так. Утечек не было. А максимум, что было - необоснованное использование лишних ресурсов в силу неоптимальности алгоритма.
Цитата Сообщение от hoggy Посмотреть сообщение
вы не дружите со здравым смыслом.
А ты не дружишь с терминологией, и яростно отказываешься принять очевидные вещи, придумывая какие-то свои определения.
Цитата Сообщение от hoggy Посмотреть сообщение
здесь по прежнему имеет место быть избыточной аллокации.
но теперь она уже не контролируется.
это - утечка.
Т.е. с циклом не контроллируется, а без цикла контроллируется? Покажи мне контроль тогда, как ты освободишь (переносимо, средствами языка) память, выделенную при инициализации a_ptr, после присвоения a_ptr адреса b:
C++
7
8
9
10
11
A *a_ptr = new A; 
B b;
a_ptr = &b;
// вот, начиная с этого места освободи память (покажи контроль), выделенную в 7 строке
a_ptr->func();
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
22.06.2015, 14:38
Цитата Сообщение от Tulosba Посмотреть сообщение
Если его деструктор вызывается, то утечек нет (при условии, что всё правильно написано). Если деструктор не вызывается, то утечки есть (то, что на них будет наплевать, в большинстве случаев, не отменяет факта их существования).
вы это профайлерам объясните.

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

C++
1
2
3
4
5
for(size_t n=0; n< max_ ; ++n)
{
    auto* ptr = pool::allocate<trololo>(params);
    //pool::deallocate(ptr); //<-- uppsss
}
замените аллокатор кастомного пула на std`шный - суть не изменится.
хз, кем нужно быть, что бы не понимать этого.

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

в отличие от вас.

вот вам не очевидно,
что утечка со стандартным аллокатором,
и утечка с любым другим кастомным аллокатором - суть та же самая утечка.

я вам могу шаблонофункцию нарисовать.
подсовывайте туда любой stl-compatible allocator.

и чо, у вас в случае с std::allocator это типа утечка,
а в случае с custom::allocator - это типа ошипко в программко,
так что ли?

что за маразм?

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

о контроле средствами языка речи не шло.
контроль осуществляется средствами виндовс.
точка.

от того, что это - непереносимый говнокод, не следует, что в нем утечка.
что не понятно?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.06.2015, 15:14
Цитата Сообщение от hoggy Посмотреть сообщение
вы это профайлерам объясните.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
struct S
{
    static S& instance() {
        static S s;
        return s;
    }
private:
    S() { std::cout << "ctor\n"; }
    ~S() { std::cout << "dtor\n"; }
};
 
int main()
{
    S::instance();
}
Всё нормально. Никаких утечек не диагностировано.
Цитата Сообщение от hoggy Посмотреть сообщение
суть не изменится.
Суть чего? Ну выделил память, потом освободил. Тут по-твоему есть утечки, или что ты хочешь этим сказать?
Цитата Сообщение от hoggy Посмотреть сообщение
все эти формальные определения мне хорошо известны.
В этом ты заблуждаешься. Попробуй задуматься хотя бы почему в этой теме твою точку зрения по утечкам никто не поддерживает. Все дураки, один ты д'Артаньян?
Цитата Сообщение от hoggy Посмотреть сообщение
я вам могу шаблонофункцию нарисовать.
Зачем что-то пытаться усложнять, тем самым уходить в какие-то дебри, когда достаточно трёх строк кода ТС:
C++
1
2
3
A *a_ptr = new A;
B b;
a_ptr = &b;
Цитата Сообщение от hoggy Посмотреть сообщение
о переносимости речи не шло.
Цитата Сообщение от hoggy Посмотреть сообщение
о контроле средствами языка речи не шло.
Ну, представь, что я добавил эти требования. Утечки в таком случае будут в упомянутых трех строчках (по-твоей логике)?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
22.06.2015, 17:36
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё нормально. Никаких утечек не диагностировано.
профайлер профайлеру рознь.

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

Цитата Сообщение от Tulosba Посмотреть сообщение
Суть чего? Ну выделил память, потом освободил. Тут по-твоему есть утечки, или что ты хочешь этим сказать?
где вы здесь видете освобождение?
C++
1
2
3
4
5
for(size_t n=0; n< max_ ; ++n)
{
    auto* ptr = pool::allocate<trololo>(params);
    //pool::deallocate(ptr); //<-- uppsss
}
вы вообще знаете, что такое "пул памяти" ?
грубо говоря, это сингелтон (не обязательно).
который при старте хапает сразу большой кусок памяти.
в дальнейшем, приложение просит память уже у него, а не у системы.
в конце работы пул возвращает всю память системе.

ну вот, формально приложение само за собой все зачистило.
пул же корректно отдал все, что запрашивал.
и профайлеры молчат.

а то, что пул надрывался,
и был забит дохляками - это извиняйте.

Цитата Сообщение от Tulosba Посмотреть сообщение
В этом ты заблуждаешься. Попробуй задуматься хотя бы почему в этой теме твою точку зрения по утечкам никто не поддерживает. Все дураки, один ты д'Артаньян?
потому что здесь я вижу только двух балбесов,
которые не понимают, что такое утечка памяти,
и аппелируют к определениям,
смысла которых они так же не понимают.

Цитата Сообщение от Tulosba Посмотреть сообщение
Ну, представь, что я добавил эти требования. Утечки в таком случае будут в упомянутых трех строчках (по-твоей логике)?
по моей логике нельзя сказать, что "утечки есть".
и нельзя сказать, что "утечки будут".

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

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

(хотя его итак нужно переписать).
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
22.06.2015, 17:45
Цитата Сообщение от hoggy Посмотреть сообщение
статический сингелтон.
он переживает main.
и может держать данные в куче.
поэтому, на него и агряццо различные профайлеры.
И что? Спасибо, кэп. Это можно утечкой не считать, аппелируя к тому, что мы не теряем объекты, а данные нужны от старта приложения до его завершения.

Цитата Сообщение от hoggy Посмотреть сообщение
я то свою голову и не выключал никогда.
Тогда попейте ноопепт. Может помочь.

Цитата Сообщение от hoggy Посмотреть сообщение
там нет утечки.
я вам привел два варианта кода.
у которых одинаковый смысл.
и практически одинаковое поведение.
и вы мне сейчас не сможете объяснить разницы.
В обоих вариантах утечка. Даже если просто следовать здравому смыслу. Например мы создаем нафиг не нужный объект в дофига гигабайт. Этим мы отбираем память у других приложений, которые будут теперь лапу сосать. Что-то непонятно?


Цитата Сообщение от hoggy Посмотреть сообщение
почему же тогда эти определения не работают:
Потому что работают.
"When an application dynamically allocates memory, and does not free that memory when it is finished using it, that program has a memory leak."
И где противоречие с пулом? Тут вообще не сказано, напрямую мы запрашиваем память у ОС, или через пул. Плюс вспомним определение про то, что память занимается без пользы.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
22.06.2015, 17:50
Цитата Сообщение от ct0r Посмотреть сообщение
В обоих вариантах утечка. Даже если просто следовать здравому смыслу. Например мы создаем нафиг не нужный объект в дофига гигабайт. Этим мы отбираем память у других приложений, которые будут теперь лапу сосать. Что-то непонятно?
ага... отлично.
наконец то вы начали думать.

итак, конструкция вида:

C++
1
2
auto* p = new some;
delete p;
это теперь у вас так же является утечкой?
маразм крепчал.

Цитата Сообщение от ct0r Посмотреть сообщение
И где противоречие с пулом?
приложение аллоцировало динамическую память в немерянных количествах.
и вернуло всю эту память когда завершалось.
согласно данному определению утечки нет.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
22.06.2015, 18:18
Цитата Сообщение от hoggy Посмотреть сообщение
это теперь у вас так же является утечкой?
Это с какой стороны смотреть (при условии что код бесполезен). Захочу, назову утечкой. Захочу, не назову.

Цитата Сообщение от hoggy Посмотреть сообщение
приложение аллоцировало динамическую память в немерянных количествах.
и вернуло всю эту память когда завершалось.
согласно данному определению утечки нет.
Хорошо подгоняем, не думая, под то, что хотим Приложение динамически выделяет память в пуле под объекты, потом ее не освобождает, когда они становятся не нужны, - значит утечка.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
22.06.2015, 18:48
Я бы сказал, что вам не хватает определения границ, за которыми заканчивается "чёрный ящик", без этих границ сложно говорить о каких-либо требуемых ресурсах. Если какая-то функция занимает память, то это может вызвать утечку. Однако в паре с функцией, которая память освобождает, чёрный ящик уже безопасен.

А если чёрный ящик определён, то можно сконструировать операционное определение утечки, например, через программу, которая перечисляет натуральные числа и на каждом шаге обращается к чёрному ящику.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.06.2015, 18:48
Цитата Сообщение от ct0r Посмотреть сообщение
Приложение динамически выделяет память в пуле под объекты, потом ее не освобождает, когда они становятся не нужны, - значит утечка.
Это типичный случай добавления нового уровня косвенности.
Тоже самое, что запустить код с утечками в виртуальной машине, и можно говорить, что утечек как бы нет (говоря уже про реальную машину, но не упоминая этого явно).
Но дело в том, что выделение ресурса и диагностику его утечек следует проводить на том же самом уровне, а не в разных.
Вот hoggy делает это в разных, и думает, что прав, но увы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2015, 18:48

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru