[英]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
后, a
和b
用于指向的对象不再存在。 因此, a
和b
不再是有效的指针,你不能对使用它们的值做任何事情。 特别是,尝试拒绝指针将导致未定义的行为。 (但是,如果使它们指向有效对象,则可以重用这些变量。)
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;
a
和b
指向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.