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