gpt4 book ai didi

c++ - 删除用指针分配的内存(动态数组)

转载 作者:行者123 更新时间:2023-11-30 01:13:03 25 4
gpt4 key购买 nike

如果我创建 2 个指针:

int *pointer;
int *temp;

在这种情况下,我为其中之一分配内存 temp:

temp = new int [ size ]; //size = 6

然后我将第二个指针 pointer 指向相同的内存位置:

pointer = temp;

如果我想解除临时分配:

delete [ ] temp;

它不会让我......我说它不会让我因为如果我做一个循环来填充 temp 的元素它仍然会让我填充它即使在我使用 删除 [ ] 临时;。我想了解这里发生了什么,所以现在我的问题是:

  1. 当我执行 delete [ ] temp; 时,内存被释放了(我想不是因为我有另一个指针指向那个位置),如果不是……这是否意味着 delete [ ] temp; 没有效果?
  2. 如果有多个指针指向该内存位置,是否可以释放内存?
  3. 假设我已经完成了这两个指针,我想释放内存,最好的方法是什么?我不能执行 delete [ ] pointers; 因为我从未为指针分配内存,我只是将它指向 temp 内存地址。

注意:我知道我可以使用 vector 我只是想在使用指针时理解内存管理。

最佳答案

When I did delete [ ] temp; was the memory deallocated

当然是! delete运算符非常听话,它假设如果您要求它删除一 block 内存,那么您就永远完成了该 block 。

I think not because I had another pointer pointing to that location

你打电话的那一刻delete []temp 上另一个指针变得悬空。取消引用它是 undefined behavior ,这意味着您的程序是无效的,即使它编译甚至运行完成而没有崩溃。

Is it possible to deallocate memory if more than one pointer is pointing to that memory location?

是的,也就是说,事实上,会发生什么。

Lets say that i am done with both pointers and i want to free the memory, what would be the best way to do it?

使用智能指针,例如 std::shared_ptr<T> .这会让你避免调用 delete完全。

关于c++ - 删除用指针分配的内存(动态数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999202/

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