如何检查指针是否在C 中删除
How do i check whether the pointer is deleted or not in C++
我在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会释放该内存。
不是关于信任编译器。我只想确认是否已删除。如果它删除了它的好处,但是如果没有删除,则...
由于无法测试指针是否已被删除,所以诀窍是构建程序,使得对指针的状态永远不会怀疑。
典型的解决方案是将指针存储为被描述为"智能指针"的类的私人成员变量,并且永远不要让该类函数的邮政条件将指针留在已删除状态下。这建立了一个不变的类,可以保证对象的整个生命周期中的指针的有效性,因此无需找出何时可以删除指针。
标准库为您提供智能指针类,因此几乎不需要编写delete
或delete[]
自己。
如果您以动态数组为例,则无需使用任何指针。您可以使用std::vector
:
{
std::vector<int> p(10);
}
// memory was freed; no need to test
如果要确保删除的指针不包含不安全的值,则可以确保将其设置为Nullptr。
delete[] p;
p = nullptr;
如果您想查看是否已删除,只需检查:
if (p != nullptr)
{
}
希望这会有所帮助!
相关文章:
- 是否删除在对象构造过程中创建的对象
- 擦除是否删除 stl 无序列图元素使用的堆内存
- 是否删除导致不明确过载的转换
- 打开模板参数:GCC 是否删除开关
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- C++是否删除显式对象
- 用错误的标志顺序编译后,是否删除*.cpp文件
- 是否删除非模板类析构函数中的模板类指针
- 是否删除整数的符号扩展
- 如何判断是否删除从函数返回的指针
- 非常简单的C ++:在 fstream 中>>运算符在读取某些内容后是否删除换行符?
- 类内成员初始化是否删除赋值运算符
- STL 容器调用的 Clear() 方法是否删除堆对象
- 提取运算符是否删除分隔符
- 分配动态数组时,是否删除了前面的元素
- STL矢量:当矢量容量因插入而增加时,在分配新的连续内存后,是否删除或保留旧的连续内存
- 编译器是否删除模板中类型的条件语句
- 使用条带是否删除二进制文件上的RTTI信息
- 复制/加载后是否删除
- (Pop in Array Based Stack)是否删除元素?