Вы не.
Стек - это структура данных. Это LIFO (Last In, First Out), что означает, что последнее, что было помещено в стек, является первым, которое будет удалено из стека. Вот как вы можете думать об этом в программировании:
main -> foo
Основная функция (точка входа) вызывает некоторую функцию foo. Некоторые переменные объявлены / определены в главной функции. Другие объявлены в функции foo, которые находятся на другом уровне области видимости.
Когда вы входите в программу, все переменные, объявленные в main, помещаются в блок стека. То же самое с foo, когда он вызывается, но следующий блок. Затем, когда он достигает конца функции foo, он выталкивает этот набор переменных из стека (или «освобождает» их). Когда он достигает конца основной функции, он выталкивает этот набор переменных из стека.
Таким образом, чтобы ответить на ваш вопрос, ВСЕ локальные переменные, включая локальные массивы, которые хранятся в стеке, автоматически удаляются, когда они выходят за пределы области видимости. Вы никогда не должны освобождать их сами.
Вы просто беспокоитесь о том, что кладете в кучу, когда вы используете «malloc» в C или «new» в C ++.