2013-03-12 2 views
2

Если я объявляю что-то на куче, например char *a=new char[1000], и основная программа останавливает то, что произойдет с этой выделенной памятью, если нет вызова delete[]? Он остается в куче или автоматически освобождается?C++ heap memory allocation/deallocation

+2

Немного терминологии: вы ** объявляете ** и ** определяете ** имена, например 'a'. Вы ** выделяете ** объекты в кучу. Ну, формально, «бесплатный магазин», но никто этого не называет. –

+0

дубликат http://stackoverflow.com/questions/6727383/dynamically-allocated-memory-after-program-termination – Saqlain

+2

@PeteBecker: могу ли я процитировать это в моей информации о пользователе, для справки, когда люди делают это: «C++ не имеет кучи поэтому я отказываюсь отвечать на ваш вопрос «вещь? –

ответ

8

Что касается C++, то что с ним произойдет, полностью не определено. Однако практически любая разумная операционная система очищает память, выделенную процессом, когда она завершается. Это, однако, очень хорошая практика для очистки после себя.

0

Когда приложение по какой-либо причине выходит из строя или прерывается, ОС восстанавливает память в обычном случае. Но это не определено.

2

Что C++ стандарт определяет «заканчивается» вскоре после того, как вы вернетесь из main() - это объяснить, что глобальные объекты уничтожаются в какой-то момент после этого, atexit() и некоторые другие «мы Переламывание» функции уровня также получить работать после main возвращается. Но то, что происходит с памятью, в которой работает ваша программа, не указывается стандартом C++. То же самое относится к содержимому кучи.

Это зависит от ОС, чтобы очистить приложение, если в системе есть ОС (C++ не указывает, что у вас также должна быть ОС).

Смежные вопросы