在循环中取消分配内存

Fre*_*Lou 3 c++ pointers memory-management

我正在阅读麻省理工学院的C++简介,一个代码示例显示:

int *getPtrToFive() {
    int *x = new int;
    *x = 5;
    return x;
}

int main() {
    int *p;
    for (int i = 0; i < 3; ++i) {
        p = getPtrToFive();
        cout << *p << endl;
        delete p;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么有可能在每次迭代后删除"p",尽管在循环开始之前声明了一次"p"并且没有使用"new"分配.

另一个问题是当"*x"在函数中被赋值为5时,因为它是一个指针,内存地址会被改变吗?那么它会是0x00005而不是实际值5吗?

Ela*_*zar 6

我想知道为什么有可能在每次迭代后删除"p",尽管在循环开始之前声明了一次"p"并且没有使用"new"分配

不.您没有删除p,您正在删除对象p指向,使用new每次迭代分配.

另一个问题是当"*x"在函数中被赋值为5时,因为它是一个指针,内存地址会被改变吗?那么它会是0x00005而不是实际值5吗?

x将是0xFFd00whatever.但是你要打印的值*x是"地址0xFFd00whatever内存中的数字".x=5你的代码中没有; 只有*x=5.这意味着"转到x指向的地址,并将数字5放在那里".

你可以这样思考:你有一只手,好吗?我们称之为"x".命令

x = new int;
Run Code Online (Sandbox Code Playgroud)

意思是"将手指指向桌面上的空位." 哪里

*x = 5;
Run Code Online (Sandbox Code Playgroud)

意思是"画出你手指向的五号".