gpt4 book ai didi

C++ - 使用 "new"在堆上分配内存

转载 作者:可可西里 更新时间:2023-11-01 18:16:33 28 4
gpt4 key购买 nike

如果我有如下语句:

int *x = new int;

在这种情况下,我已经在堆上动态分配了内存。换句话说,我现在有一个 reserved 内存地址用于 int 对象。

然后说我做了以下内容:

删除 x;

这意味着我释放了堆上的内存地址。

然后说我又做了以下事情:

int *x = new int;

x 是否会指向它在删除之前指向堆的相同旧内存地址?

如果我在 delete 之前这样做会怎样:

x = NULL;

然后,这样做:

int *x = new int;

x 是否会指向堆上的内存地址,而不是旧地址?

谢谢。

最佳答案

在第一种情况下,您可能再次获得相同的内存块,但不确定。

在第二种情况下,因为您还没有释放内存,所以几乎可以肯定您会在不同的地址获得不同的内存块。有 C++ 的垃圾收集器。如果您使用其中之一,可以想象垃圾收集器将在您将指针设为 NULL(因此您不再有权访问先前分配的内存块)和再次请求分配之间运行。在这种情况下,您可以再次获得相同的内存块。当然,如果没有垃圾收集器,您只是在泄漏内存,所以无论如何您都不会这样做。

关于C++ - 使用 "new"在堆上分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836089/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com