我在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<<"\n\nmemory cannot be free";
}
答案 0 :(得分:3)
如何在C ++中检查指针是否被删除
无法在C ++中检查指针是否被删除。
也无需检查指针是否被删除。如果你从new-expression获得一个指针,而你之前还没有删除指针,那么可以安全地假设delete会释放那个内存。
它不是信任编译器。我只是想确认它是否被删除。如果删除它的好,但如果它没有删除那么......
由于无法测试指针是否已被删除,因此诀窍是构造程序,以便永远不会怀疑指针的状态。
典型的解决方案是将指针存储为描述为&#34;智能指针&#34;的类的私有成员变量,并且永远不要让该类的任何函数的post条件将指针保留在删除状态。这建立了一个类不变量,它保证指针在整个生命周期内的有效性,因此永远不需要找出何时可以删除指针。
标准库为您提供智能指针类,因此几乎不需要自己编写delete
或delete[]
。
如果您使用动态数组作为示例,则不需要使用任何指针。您可以改为使用std::vector
:
{
std::vector<int> p(10);
}
// memory was freed; no need to test
答案 1 :(得分:1)
如果你想确定你删除的指针不包含不安全的值,你可以确保在之后将它设置为nullptr。
delete[] p;
p = nullptr;
如果您想查看它是否已删除,只需查看:
if (p != nullptr)
{
}
希望这有帮助!