c++ - 在循环中取消分配内存

标签 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;
    }
}

我想知道为什么在每次迭代后都可以删除“p”,尽管“p”在循环开始之前被声明过一次并且没有使用“new”分配。

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

最佳答案

I was wondering why it is possible to delete "p" after every iteration despite "p" being declared once before the loop started and was not allocated using "new"

没有。您不是在删除 p,而是在删除 p 指向的对象,它是在每次迭代时使用 new 分配的。

Another question is when "*x" is assigned the value 5 in the function, since it is a pointer the memory address would be changed right? So it would be something like 0x00005 instead of the actual value 5?

x 的值将类似于 0xFFd00whatever。但是你正在打印 *x 的值,它是“内存中地址 0xFFd00whatever 的数字”。您的代码中没有 x=5;只有 *x=5。它的意思是“转到 x 指向的地址,并将数字 5 放在那里”。

你可以这样想:你有一只手,好吗?我们称它为“x”。命令

x = new int;

意思是“将手指指向办公 table 上的某个空位。”在哪里

*x = 5;

表示“在您的手指向的地方画出数字 5”。

关于c++ - 在循环中取消分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264100/

相关文章:

c++ - 实数 - 如何确定是否需要 float 或 double?

c++ - 指向成员结构的指针如何工作?

c++ - 修改指针后C++中数组的释放器

java - 如何查看用户java类的内存利用率?

delphi - 如何在不启用使用运行时包构建的情况下使用 Delphi Dlls

c++ - 使用 XCode 编译时具有相同类名的预期类名 C++

c++ - 两个类包含彼此的对象

c++ - 如何在 C++ 中有意保留和收获悬空指针

c - 段错误 : 11 when allocating a matrix

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?