加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 当我们将指针指定为NULL时会发生什么?

发布时间:2020-12-16 10:52:51 所属栏目:百科 来源:网络整理
导读:我有一个指向某些数据的指针.现在我创建了一个类似的指针.现在,这个新指针被分配给旧指针.如果我删除旧的将会发生什么? A* a = new A();A* b = a;a = NULL; “a”和“b”会发生什么? 而且,如果我做了以下事情: A* a = new A();A* b = a;delete a; 而且我
我有一个指向某些数据的指针.现在我创建了一个类似的指针.现在,这个新指针被分配给旧指针.如果我删除旧的将会发生什么?

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仍然指向第一行中分配的对象.现在什么都没有.你仍然可以通过b指针“使用”对象,你可以通过删除b;删除对象.
你可以删除一个;这里 – 它将没有任何效果(因为a是NULL),但它是安全的,不会导致未定义的行为.

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读