当我们分配指针 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* a = new A();
A* b = a;
a = NULL;
在此之后,b
仍然指向在第一行中分配的对象。 a
现在什么也没指出。您仍然可以通过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
不再指向任何内容,并且您没有该对象的句柄,因此无法删除它。所以,这是一个普通的旧内存泄漏。
(与第一种情况一样,您可以在a = NULL;
行之后delete a;
,但它不会有任何影响,内存仍然泄漏。
">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;
现在a
解决0x0的要点,A
在网络空间中消失了。你泄露了记忆。
那个有点晚
@apoorva "如果我将任何新指针分配给 a 然后使 a 为 null 怎么办。然后删除 a。它不会有任何效果。即您不会释放新 A(( 占用的内存,仅仅是因为 a=null 并且您正在尝试删除 a;现在包含空。
- C++不重载时间函数,所以我们不需要写 NULL 有什么原因吗?
- 这句C++是什么意思?BaseWindow() : m_hwnd(NULL) { }.
- XOpenDisplay(0) 和 XOpenDisplay(NULL) 有什么区别?
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 当使用反向循环逆转字符串时,null字符会发生什么
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- LinkedListInit, LinkedListCreateH 方法中的"L->next=NULL"有什么问题吗?
- 在C++中NULL和__NULL之间有什么区别
- 测试指针是否为null的最有效方法是什么?
- 删除指针并将指针设置为null之间有什么区别
- if(NULL==指针)和if(指针==NULL)之间有什么区别
- 解密字符串末尾的 NULL 终止符需要什么?
- 什么是 C++ std::map 的 null 关键字?
- 从转储中获取调用堆栈的几乎所有帧中的此指针 NULL 表明什么
- 什么是 NULL 的非指针等效项
- C++`int*class::*member=NULL`编译,原因是什么
- *this=NULL在模板类中的方法内部意味着什么
- gdb 错误:找不到方法 (null)什么
- 什么是NULL指针值?
- "- < /dev/null"在"gcc -dM -E - < /dev/null"中是什么意思?