如何在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++中没有方法检查指针是否被删除。 也不需要检查指针是否已被删除。如果您从新表达式中获取指针,而您之前尚未删除指针,则可以安全地假定删除将释放该内存 这不是关于信任编译器。我只是想确认它是否被删除。如果它被删除了,那就好了,但是如果它没有被删除,那么 由于无法测试指针是否已被删除,因此关键在于构造程序,使指针的状态毫无疑问 典型的解决方案是将指针存储为“智能指针”类的私有成员变量,并且决不允许该类的任何函数的post条件使指针处于已删除状态。这将建立一个类不变量,以确保指针在对象的整个生命周期内的有效性,因此无需确定何时可以删除指针 标准库为您提供了智能指针类,因此几乎不需要自己编写如何在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条件使指针处于已删除状态。这将建立一
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。智能指针,良好的选择