如何在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<<"\n\nmemory cannot be free"; } #包括 使用名称空间std; int main() { int*p; p=新整数[10]; int i=0; 如果(!p) { 库特

如何在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<<"\n\nmemory cannot be free"; } #包括 使用名称空间std; int main() { int*p; p=新整数[10]; int i=0; 如果(!p) { 库特,c++,pointers,C++,Pointers,如何在C中检查指针是否被删除++ < >在C++中没有方法检查指针是否被删除。 也不需要检查指针是否已被删除。如果您从新表达式中获取指针,而您之前尚未删除指针,则可以安全地假定删除将释放该内存 这不是关于信任编译器。我只是想确认它是否被删除。如果它被删除了,那就好了,但是如果它没有被删除,那么 由于无法测试指针是否已被删除,因此关键在于构造程序,使指针的状态毫无疑问 典型的解决方案是将指针存储为“智能指针”类的私有成员变量,并且决不允许该类的任何函数的post条件使指针处于已删除状态。这将建立一

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

< >在C++中没有方法检查指针是否被删除。

也不需要检查指针是否已被删除。如果您从新表达式中获取指针,而您之前尚未删除指针,则可以安全地假定删除将释放该内存

这不是关于信任编译器。我只是想确认它是否被删除。如果它被删除了,那就好了,但是如果它没有被删除,那么

由于无法测试指针是否已被删除,因此关键在于构造程序,使指针的状态毫无疑问

典型的解决方案是将指针存储为“智能指针”类的私有成员变量,并且决不允许该类的任何函数的post条件使指针处于已删除状态。这将建立一个类不变量,以确保指针在对象的整个生命周期内的有效性,因此无需确定何时可以删除指针

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

对于用作示例的动态数组,不需要使用任何指针。可以使用
std::vector

{
    std::vector<int> p(10);
}
// memory was freed; no need to test
{
std::载体p(10);
}
//内存已释放;无需测试
如何在C中检查指针是否被删除++

< >在C++中没有方法检查指针是否被删除。

也不需要检查指针是否已被删除。如果您从新表达式中获取指针,而您之前尚未删除指针,则可以安全地假定删除将释放该内存

这不是关于信任编译器。我只是想确认它是否被删除。如果它被删除了,那就好了,但是如果它没有被删除,那么

由于无法测试指针是否已被删除,因此关键在于构造程序,使指针的状态毫无疑问

典型的解决方案是将指针存储为“智能指针”类的私有成员变量,并且决不允许该类的任何函数的post条件使指针处于已删除状态。这将建立一个类不变量,以确保指针在对象的整个生命周期内的有效性,因此无需确定何时可以删除指针

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

对于用作示例的动态数组,不需要使用任何指针。可以使用
std::vector

{
    std::vector<int> p(10);
}
// memory was freed; no need to test
{
std::载体p(10);
}
//内存已释放;无需测试

如果要确保删除的指针不包含不安全的值,可以确保在之后将其设置为null ptr

delete[] p;
p = nullptr;
如果您想查看它是否已被删除,只需查看:

if (p != nullptr)
{
}

希望这有帮助!

如果您想确保删除的指针不包含不安全的值,您可以确保在删除后将其设置为null ptr

delete[] p;
p = nullptr;
如果您想查看它是否已被删除,只需查看:

if (p != nullptr)
{
}


希望这有帮助!

为什么您认为您需要检查?您不信任的是什么?运行时?为什么您信任它甚至在正确地执行加法?可能op存在信任问题。您无法检查指针是否已被
删除
d。它未设置为
nullptr
,并且没有标准方法要求实现r它。只需使用RAII并考虑对象的生存期。还要注意,
new
将永远不会返回
nullptr
:如果它无法分配,则会抛出
std::bad_alloc
。我可以确认,它已被删除。为什么您认为需要检查?您不信任的是什么?运行时?您为什么信任它甚至在执行添加操作那么直接吗?可能op存在信任问题。您无法检查指针是否已被
删除
d。它未设置为
nullptr
,并且没有标准的方法要求实现它。只需使用RAII并考虑对象的生存期。还请注意
new
将永远不会返回
nullptr
:如果它可以无法分配,
std::bad_alloc
被抛出。我可以确认,它已被删除。它给出了错误:未在此列表中声明nullptrscope@AnupriyaPatil使用C++ 98编译器吗?@ AuPrIyPAPTATL,这意味着编译器是旧的。可以使用0而不是NulLPTR。考虑升级。@ AnInBaySARKAR我使用GCC编译器和DEV C++ IDE。@AnirbanSarkar 0工作不会告诉任何关于标准版本的信息;它在最新标准中仍然是一个有效的空指针。事实上,nullptr不工作,这表明标准版本低于C++11。它给出了错误:nullptr未在此版本中声明scope@AnupriyaPatil您正在使用C++98编译器吗?@AnupriyaPatil这意味着编译器是旧的。可以使用0而不是NulLPTR。但是考虑升级。@ AnInBaySARKAR我使用GCC编译器和DEV C++。IDE@AnirbanSarkar0工作并没有告诉任何关于标准版本的信息;在最新的标准中,它仍然是一个有效的空指针。事实上,nullptr不工作,这说明标准d版本低于C++11。智能指针,良好的选择