繁体   English   中英

如果我们将一个动态分配的指针分配给另一个指针,会发生什么?

[英]If we assign a dynamically allocated pointer to another pointer, what happens?

#include <iostream>
using namespace std;

int main()
{
    int* A = new int[2];
    A[0] = 10000;
    A[1] = 2;
    int*B = A;
    delete B;
    cout << B << A;
}

找到上面的代码, delete B; 删除数组 A 的数据。我们可以通过释放另一个分配的指针来删除分配的 memory 吗?

你不删除指针。 你删除指向的东西

A ,在您的示例中不是数组。 它是一个指向数组第一个元素的指针。 当你写int* B = A; ,你使B成为指向同一个 memory 的指针。此时AB是相同的,并且它们指向的数组可以通过它们中的任何一个释放。

复制指针多少次并不重要。 重要的是你传递给删除表达式的指针指向的东西是用相应的分配表达式分配的(即new / deletenew[] / delete[]malloc / free等)。

我们可以通过释放另一个分配的指针来删除分配的 memory 吗?

是的,只要您正确执行,即使用适当的delete-expression

来自new.delete.single-12

要求: ptr应该是一个 null 指针,或者它的值应该代表一个 memory 的块的地址,该块由之前调用(可能被替换) operator new(std::size_t)operator new(std::size_t, std::align_val_t)尚未因对operator delete的干预调用而失效。

这意味着在你的程序中,我们可以这样写:

delete [] B;

另一方面delete B; 是不正确的,因为我们必须在这里使用数组形式的delete-expression

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM