Что происходит, когда я инициализирую массив, имеющий размер в качестве переменной? - PullRequest
0 голосов
/ 03 февраля 2019

Я хочу знать, где хранится мой массив, если он имеет переменный размер, как в приведенном ниже коде, потому что в моем учебнике говорится, что во время выполнения память выделяется куче, насколько я понимаю, но кажется, что на самом делеРаспределение стека может кто-то прояснить, как на самом деле работает выделение стека и кучи памяти.

#include<iostream>
using namespace std;

int main(){
int Array_size;
cin >> Array_size;
int array[Array_size];
return 0;
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Память стека и кучи немного абстрактны, поэтому я понимаю ваше замешательство.В общем, любые переменные внутри функций, включая main, которые не выделяются динамически (т.е. объявляют переменную с помощью new), попадают в стек.Если вы объявляете указатель, этот указатель указывает на переменную в куче, пока указатель остается в стеке.Вот почему вы всегда должны очищать указатель с помощью delete и, предпочтительно, устанавливать указатель в NULL, если он больше не используется.Любые переменные или функции, которые помещаются в стек, выталкиваются автоматически (воспринимайте push и pop как вставку и удаление, это просто правильная терминология).Память в куче выделяется и освобождается вручную и во время выполнения.Надеюсь, это прояснит ситуацию.

0 голосов
/ 03 февраля 2019

Ваша книга неверна или вы неправильно ее прочитали.

A Массив переменной длины (нестандартное расширение реализованонесколькими компиляторами C ++) всегда выделяется в автоматической памяти (т. е. в стеке), а не в динамической памяти (т. е. в куче).Память массива восстанавливается компилятором, когда массив выходит из области видимости, как и любая другая локальная переменная.

Динамическая память выделяется только оператором new или[std::](m|c)alloc() функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...