双击删除c++中分配的两个变量

Double delete two allocated variables in c++

本文关键字:两个 变量 删除 c++ 分配 双击      更新时间:2023-10-16

我得到了这个代码:

int **a;
int *b;
b = new int;
a = new int*;
*b=10;
a =&b;
std::cout << **a << std::endl;// display 10

如果我这样做:

delete a;

我是否也删除"b"?

delete a;

由于a没有与new一起分配,这导致了未定义的行为。

当您第二次分配给a时,问题才真正开始。

b = new int;
a = new int*;
*b = 10;
a = &b; // oops

此时,您已经丢失了对new的原始调用所分配的对象的跟踪,该对象最初存储在a中。所以这是内存泄漏。

您的代码可能应该是这样的:

int *b = new int;
*b = 10;
int **a = &b;
std::cout << **a << std::endl;
delete b;

如果执行delete a,则会在宇宙结构中撕开一个洞,因为a不再指向该new int*,而是指向未动态分配的b

b是动态分配的(b=new int;(然后我们将10存储到分配的int.中

然后,我们为指向int的指针分配一个指针"a"。但随后分配给"a",这意味着我们失去了"a"所指的内容。当我们删除时,我想你会得到一个错误,因为它不再指向在动态分配的存储器处。

也许你的意思是*a=b

在这种情况下,您仍然需要删除a和b

重新表述您的问题和代码:

int * b = new int;  // Dynamically allocate for 1 integer.
int * * a = new int *; // Allocate 1 pointer dynamically.
// The tricky part to understand.
// The variable `a` points to a pointer.
// So dereferencing 'a' results in a pointer to an integer.
// So, assign the pointer, in dynamic memory, with the content
// of the 'b' pointer.
*a = b;
// What does this statement do?
delete a;

在上面的示例中,delete释放为a变量分配的内存。没有更多,没有更少。

指针b不受影响。它仍然指向为整数分配的内存。

a的内存解除分配不会影响b,因为解除分配函数不会对已分配内存的内容进行操作。

是。它删除了b指向的对象。CCD_ 16和CCD_。为了确保ab没有被不当使用,请尝试添加以下内容:

a=NULL;
b=NULL;