繁体   English   中英

将指针指定为NULL时会发生什么?

[英]What will happen when we assign a pointer NULL?

我有一个指向某些数据的指针。 现在我创建了一个类似的指针。 现在,这个新指针被分配给旧指针。 如果我删除旧的将会发生什么?

A* a = new A();
A* b = a;
a = NULL;

“a”和“b”会发生什么?

而且,如果我做了以下事情:

A* a = new A();
A* b = a;
delete a;

而且我想知道当我们分配NULL时,指针会发生什么。

A* a = new A();
a = NULL;

一个仍然指向一些记忆或它指向什么?

A* a = new A();
A* b = a;
a = NULL;

在此之后, b仍然指向第一行中分配的对象。 a现在指向什么。 你仍然可以通过b指针“使用”对象,你可以通过delete b;删除对象delete b;
你可以delete a; 这里 - 它将没有任何效果(因为a是NULL),但它是安全的,不会导致未定义的行为。

A* a = new A();
A* b = a;
delete a;

delete后, ab用于指向的对象不再存在。 因此, ab不再是有效的指针,你不能对使用它们的值做任何事情。 特别是,尝试拒绝指针将导致未定义的行为。 (但是,如果使它们指向有效对象,则可以重用这些变量。)

A* a = new A();
a = NULL;

您刚刚泄露了第一行中创建的对象。 a不再指向任何内容,并且您没有该对象的句柄,因此您无法删除它。 所以,这是一个普通的旧内存泄漏。
(与第一种情况一样,你可以delete a;a = NULL;行,但它没有效果,内存仍然被泄露。)

 A* a = new A(); A* b = a; a = NULL; 

“a”和“b”会发生什么?

a将为NULL,并且b未经修改

 A* a = new A(); A* b = a; delete a; 

*a已被删除, b变为无效(此时不得再取消引用b( *b ))。

而且我想知道当我们分配NULL时,指针会发生什么。

 A* a = new A(); a = NULL; 

*a 删除,因此内存泄露。 内存不能再被释放(除非你在其他地方有一个指针的副本,但代码没有显示)。

A* a = new A();
A* b = a;
a = NULL;

b继续指向A a指向0x0的地址,解除引用会导致段错误。

A* a = new A();
A* b = a;
delete a;

ab指向A曾经被实例化的地址空间。 现在, A被删除,你应该既不提领a ,也不b ,因为它可能会出现段错误。

A* a = new A();
a = NULL;

现在,在网络空间中丢失了地址0x0和A a点。 你泄露了记忆。


那个晚了一点。 再次。

@apoorva“如果我将任何新指针指定给a,然后将其设为null,然后删除a。” 它将没有任何效果..你不会释放新A()所占用的内存,只是因为a = null并且你试图删除一个; 现在包含NULL。

暂无
暂无

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

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