📅  最后修改于: 2023-12-03 15:09:55.946000             🧑  作者: Mango
在 C++ 中,已删除的指针指的是被 delete
释放掉的指针。使用已删除的指针会导致未定义行为。
已删除的指针是指被 delete
或 delete[]
释放掉的指针。当一个指针被释放后,它所指向的内存空间将被操作系统回收,指针称为已删除的指针。如果在已删除的指针上执行任何操作,都会导致未定义行为。
例如:
int* ptr = new int(10);
delete ptr;
*ptr = 20; // 未定义行为
在上面的代码中,ptr
对应的内存空间已经被释放,所以在 *ptr = 20
这个语句中,指针 ptr
已经不再指向任何有效的内存空间,对它进行解引用操作会导致未定义行为。
在 C++ 规范中,不允许对已删除的指针进行赋值操作,因为已删除的指针不再指向有效的内存空间,对它进行任何操作都会导致未定义行为。
例如:
int* ptr = new int(10);
delete ptr;
int* ptr2 = ptr; // 未定义行为
在上面的代码中,将已删除的指针 ptr
赋值给指针 ptr2
,会导致未定义行为,因为指针 ptr
指向的内存空间已经被回收,赋值给指针 ptr2
后,指针 ptr2
也不再指向有效的内存空间。
为了避免对已删除的指针进行操作,我们可以在释放指针前将其设置为 nullptr
,这样在后续程序中就能够判断指针是否已经被释放了。
例如:
int* ptr = new int(10);
delete ptr;
ptr = nullptr;
if (ptr != nullptr) {
// ...
}
在上面的代码中,将已删除的指针 ptr
设置为 nullptr
后,在后续程序中就可以判断指针是否已经被释放了,从而避免对已删除的指针进行操作。
在 C++ 中,已删除的指针指的是被 delete
释放掉的指针。使用已删除的指针会导致未定义行为,不允许对已删除的指针进行赋值操作。为了避免对已删除的指针进行操作,我们可以在释放指针前将其设置为 nullptr
。