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* a = new A(); A* b = a; delete a; 删除后,a和b用于指向的对象不再存在.因此,a和b不再是有效的指针,你不能对使用它们的值做任何事情.特别是,尝试拒绝指针将导致未定义的行为. (但是,如果使它们指向有效对象,则可以重用这些变量.) A* a = new A(); a = NULL; 您刚刚泄露了第一行中创建的对象. a不再指向任何内容,并且您没有该对象的句柄,因此您无法删除它.所以,这是一个普通的旧内存泄漏.(与第一种情况一样,你可以删除a;在a = NULL之后;行,但它没有效果,内存仍然被泄露.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |