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

时间:2010-08-11 03:43:37

标签: c++ arrays memory pointers scope

所以,我在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 个答案:

答案 0 :(得分:11)

因为您在new上声明的对象是在堆上分配的,而像temp这样的变量在堆栈中。

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