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


#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的数据,我们可以通过释放另一个分配的指针来删除分配的内存吗?

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

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

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

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

可以,只要你正确地使用delete-expression

从new.delete.single-12:

要求:ptr应该是一个空指针,或者它的值应该代表一个内存块的地址,这个内存块是由之前调用(可能被替换)operator new(std​::​size_­t)operator new(std​::​size_­t, std​::​align_­val_­t)分配的,该内存块没有被中间调用无效。operator delete.

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

delete [] B;

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

相关内容

最新更新