如何检查指针是否在C 中删除

How do i check whether the pointer is deleted or not in C++

本文关键字:是否 删除 指针 何检查 检查      更新时间:2023-10-16

我在c 中写下了"数组指针"程序。我已经删除了指针,但是我无法确认指针是否已删除。预先感谢!

#include<iostream>
using namespace std;
int main()
{
    int *p;
    p=new int[10];
    int i=0;
if(!p)
{
    cout<<"ndynamic memory allocation failed"<<endl;
}
cout<<&p;
for(i=0;i<10;i++)
{
    p[i]=i+1;
}
for(i=0;i<10;i++)
    cout<<"nvalue of pointer p="<<p[i];

delete[] p;
if(!p)
    cout<<"nnmemory cannot be free";
}

我如何检查指针是否在C 中删除

无法检查指针是否在C 中删除。

也无需检查指针是否已删除。如果您从新表达式获得指针,并且还没有更早地删除指针,那么可以肯定地假设Delete会释放该内存。

不是关于信任编译器。我只想确认是否已删除。如果它删除了它的好处,但是如果没有删除,则...

由于无法测试指针是否已被删除,所以诀窍是构建程序,使得对指针的状态永远不会怀疑。

典型的解决方案是将指针存储为被描述为"智能指针"的类的私人成员变量,并且永远不要让该类函数的邮政条件将指针留在已删除状态下。这建立了一个不变的类,可以保证对象的整个生命周期中的指针的有效性,因此无需找出何时可以删除指针。

标准库为您提供智能指针类,因此几乎不需要编写deletedelete[]自己。

如果您以动态数组为例,则无需使用任何指针。您可以使用std::vector

{
    std::vector<int> p(10);
}
// memory was freed; no need to test

如果要确保删除的指针不包含不安全的值,则可以确保将其设置为Nullptr。

delete[] p;
p = nullptr;

如果您想查看是否已删除,只需检查:

if (p != nullptr)
{
}

希望这会有所帮助!