Это зависит ...
Итак, вы спросили "... нужно ли освободить ...?" и ответ: "это зависит."
Если структура нужна почти до тех пор, пока программа не завершится с помощью возврата из main(),
exit()
или сигнала, то нет она никогда не должна освобождаться независимо от того, что в нем. 1
Если ресурс выделяется динамически в долгоживущем процессе, таком как редактор или демон сервера, но если после транзакции или периода времени он больше не нужен, то yes , его нужно освободить, иначе у программы будет утечка памяти .
Освобождение структуры приведет к утечке памяти, если содержащиеся объекты также будут динамически размещаться. Либо вообще ничего не нужно освобождать, либо нужно освободить весь граф объектов с корнем в этой структуре.
Правило простое, каждый человек malloc()
должен соответствовать одному человеку free()
.
1. Сказав это, обычно привлекает небольшой поток доктринеров "Вы должны освободить все" протест, но такой протест частично дезинформирован. C ++ Faq хорошо обсуждает проблему . Одной из проблем является то, что медленно и бессмысленно вставлять или касаться множества страниц, которые ОС может освободить как блок. Но да, есть аргумент, что это хороший шаблон проектирования, хорошая практика, и если есть какая-либо возможность включить код во вторую программу, память всегда должна быть освобождена.