LINUX.ORG.RU

Если аварийно завершить приложение, может ли произойти утечка памяти?

 ,


0

6

Приветствую всех.
Допустим имеется самописное приложение на С++/Qt.
Может ли произойти утечка памяти, если приложение завершится принудительно (CTRL+C в консоле, в диспетчере задач через завершить процесс)?
Или в этих случаях срабатывает чистильщик мусора и удаляем сам все объекты из динамическом памяти?

Пример:

MyClass *obj = new MyClass;
...
ПРИНУДИТЕЛЬНОЕ ЗАВЕРШЕНИЕ ПРИЛОЖЕНИЯ
...
delete obj;

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

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)

Извините за оффтоп, но в линуксе мне говорили о процесах зомби, это прошлое, или они до сих пор существуют?

Насколько я понимаю это тоже утечка памяти, потеря управления или что то такое?

Shulman
()
Ответ на: комментарий от Shulman

До сих пор существуют. Это потеря родителя.

stave ★★★★★
()

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

ckotinko ☆☆☆
()
Ответ на: комментарий от vebmaster

Там тоже есть ядро. И зомби есть тоже, да.

mandala ★★★★★
()

Есть же RAII, смартпоинтеры и все дела, если говорить про C++ без Qt. 90% проблем с памятью решены.

Meyer ★★★★★
()
Ответ на: комментарий от Meyer

Есть же RAII, смартпоинтеры и все дела

Как это всё связано с принудительным завершением приложения?

UVV ★★★★★
()
Ответ на: комментарий от Shulman

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

Kronick
()

Может только в случае если приложение использовало глючные и бажные дрова. Иначе такого не бывает.

cvv ★★★★★
()

Если ты не сделал чего-то очень особенного (я не уверен за работу ОС в режиме реального времени, например, но должно быть и там всё нормально) и используешь адекватную ОС, то ничего плохого быть не должно.

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

Ничего не вызовется. Просто ядро почистит за вами ресурсы своими методами.

PPP328 ★★★★★
()

Когда умирает приложение, ядро, по крайней мере в линуксе, очищает всю кучу, что была занята приложением. Никакой код в твоем приложении не выполняется после kill -9.

Aswed ★★★★★
()
Ответ на: комментарий от Meyer

Есть же RAII, смартпоинтеры и все дела, если говорить про C++ без Qt. 90% проблем с памятью решены.

и тут огребаются проблемы со скоростью :-) вообще встаёт вопрос - а нахрена тут C++, вы только что убили его плюшки

ввод в прикладной класс «счётчика ссылок» или «маркера» доступа - это первый звоночек что пора уходить в другой язык или делать рефактор проекта.

MKuznetsov ★★★★★
()
Ответ на: комментарий от Meyer

Есть же RAII, смартпоинтеры и все дела, если говорить про C++ без Qt. 90% проблем с памятью решены.

Речь о креше или убийстве приложения, при чем тут умные указатели?

andreyu ★★★★★
()
Ответ на: комментарий от MKuznetsov

и тут огребаются проблемы со скоростью

Какие проблемы со скоростью у unique_ptr<T>? А какие проблемы со скоростью у RAII?

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.