Assert освобождает память в переполнении стека

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

3

Решение

assert при неудаче пишет ошибку STDERR и звонки прервать (). который в отличие от выход() не выполняет функции, зарегистрированные в atexit (), и при этом это не называет деструкторами.

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


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

8

Другие решения

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

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

Таким способом вы можете обнаружить память, которую должна освободить ОС, с помощью утилиты, такой как Valgrind.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector