C/C++

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

Если приложение вызывает утечку памяти, то при завершение работы приложения динамическая память очиститься или нет, то есть так и будет занимать место в памяти до полного выключения машины
Завершение родительского процесса не гарантирует завершение дочерних процессов. В этом случае, если дочерние процессы лишены возможности принудительного завершения, они будут висеть в памяти и занимать системные ресурсы до выполнения перезагрузки либо вам их придётся убивать вручную из диспетчера задач (очень плохая идея).
СУ
Сергей Усольцев
66 240
Лучший ответ
Скорее нет:
• память выделенная процессу - освобождается автоматически мемори менеджером ОС
• память выделенная системным объектам созданным процессом - не освобождается, пока сами объекты не будут освобождены (объекты могут не освобождаться и после завершения порождающего процесса. Это зависит от многих факторов).

// Кстати, утечка хэндлов сама по себе намного хуже утечки памяти - поэтому, с объектами ОС надо работать очень внимательно, корректно освобождая ресурсы явным образом (когда компилятор/интерпретатор не делает это магически, оставляя на совести программиста).
Игорь Швыдкий
Игорь Швыдкий
83 615
Юрий Носов На сколько я знаю в ядре Linux перед завершением процесса все открытые дескрипторы закрываются.
Если приложение использовало в работе только свою кучу, то утечка исчезнет. Если прога юзала процессы и память других запущенных программ и там накосячила, то утечка останется до завершения тех приложений.
Виктор Тарасов
Виктор Тарасов
37 945
Выделением памяти для приложения занимается ОС.
Программа запрашивает динамич. память у ОС (которая кст может и не выделить)
ОС все подчистит после завершения программы.
если исключение включает очистку памяти, то да, вычищает, иначе система потом все исправит, есть диспетчер памяти
если это приложение - то по определению приложения - да, ОС очистит.

если это системный драйвер, то на винде я такое пробовал с драйвером, который писал. перезапуск и переустановка драйвера не помогает. помогает только перезагрузка. драйвер не только своего процесса не имеет, но даже память ни к какому из системных процессов не приписана. и мне казалось, что утечки в моем драйвере просто нет)) я не замечал, что общий расход памяти сильно увеличивался. через несколько часов работы системы с этим драйвером свободного ОЗУ не было.
мораль: на Си лучше не писать, а на С++ писать без ручного выделения памяти.
очистится, после завершения приложения оно полностью убирается из оперативы