Почему выделенная память указателя сохраняется после функции, а не массива? - PullRequest
4 голосов
/ 11 августа 2010

Итак, я задаю этот вопрос в контексте основной функции ввода текста, которую я вижу в книге C ++:

char *getString()
{
    char temp[80];
    cin >> temp;
    char * pn = new char[strlen(temp + 1)];
    strcpy(pn, temp);
    return pn;
}

Итак, temp объявляет массив из 80 символов, автоматическую переменную, память которойосвобождается один раз getString() возвращается.Было рекомендовано, что если по какой-либо причине вы вернете temp, его использование вне функции будет ненадежным, поскольку эта память освобождается после завершения функции.Но так как я также объявляю pn в том же контексте, почему его память также не отбрасывается?

1 Ответ

11 голосов
/ 11 августа 2010

Поскольку объекты, которые вы объявляете с помощью new, размещаются в куче, а переменные типа temp находятся в стеке.

Когда ваша функция возвращается, ее кадр стека освобождается, а куча - нетпострадавших.

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