Массив, объявленный в функции, выделяется в стеке программы. Когда ваша программа выходит из этой функции, локальные переменные в стеке выгружаются, а память, содержащая массив, больше недоступна. Альтернативой является новый указатель на массив, который выделяется на кучу программы, выдержит функцию выхода и должен быть затем удалить 'd или утечка памяти.
Довольно общее описание стека программы представляет собой блок памяти, выделенный для хранения локальных переменных для ваших функций. Когда вызывается функция, объем памяти, необходимый для хранения локальных переменных для этой функции, помещается в верхнюю часть стека, т. Е. Указатель стека перемещается вверх на эту величину. Когда функция выходит, то точный объем памяти удаляется с вершины стека, и указатель стека возвращается к своему предыдущему местоположению до вызова функции. С другой стороны, куча программ - это память, которая не имеет семантики стека и используется, когда функция запрашивает блок памяти . Затем программа отвечает за управление освобождением этой памяти.
Smart pointers часто используются в C++ для автоматической обработки выделения и освобождения памяти, чтобы избежать ошибок/утечек памяти, связанных с управлением памятью.
Быстрый google поднял this explanation of stack versus heap in C++.
Большое спасибо! Мы были введены (кратко) в кучу и стек в курсе Инженерного программирования, но я не понимаю различия. Не могли бы вы объяснить или указать мне в сторону каких-либо хороших ресурсов? Еще раз спасибо! – JonaGik
@JonaGik: см. Http://stackoverflow.com/q/79923/10077 –
Подумайте о каждой переменной в системе в виде табличек. Когда вы вводите функцию, параметры и локальные переменные добавляются в стек табличек, где они становятся грязными и используются. Когда вы покидаете функцию, ваши пластины должны быть очищены, поэтому их бросают в раковину. Куча больше похожа на таблицу с карточками имен (адресами). Вы можете поместить любую табличку на стол с новым, и любой может использовать ее, если они знают имя (то есть адрес), но вам в конечном итоге придется очистить после себя удаление. Никто не любит грязный стол :-) – Joel