为什么指针的分配内存在函数之后仍然存在,而不是数组?

sou*_*ula 4 c++ memory arrays pointers scope

所以,我在C++书中看到的基本文本输入函数的上下文中提出这个问题:

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

因此temp声明了一个包含80个字符的数组,这是一个自动变量,其内存将在getString()返回时被释放.有人建议,如果temp由于某种原因返回,它在函数之外的使用将不可靠,因为一旦函数完成就释放了内存.但是既然我也在pn相同的语境中宣称,为什么它的记忆也不会被丢弃?

Bor*_*lid 11

因为您声明的对象new是在堆上分配的,而类似temp的变量则在堆栈上.

当函数返回时,它的堆栈帧被释放,但堆不受影响.