如何验证删除的指针?

时间:2017-05-09 19:32:10

标签: c++ c++11 pointers nullpointerexception void-pointers

可能这是一个非常愚蠢的问题。但我不知道答案。

如果某个指针引用的对象被某人删除(我们不知道谁删除它),但我仍然有指向它的原始指针。如何验证它是否有效。我虽然null检查会有所帮助,但事实并非如此。

以下是一个例子:

int main()
{
   class A
   {
   public:
      A() = default;
      ~A() = default;
   private:
      int a;
      long b;
   };

   A* a = new A();
   delete a; // deleted here
   A* b = reinterpret_cast< A* >( a ); // still trying to use it 
   if( b == nullptr )
      std::cout << "B is Null"; // b should have come as null, but it does not and I do not see this line in output.

   // same here
   A* c = ( A* ) a;
   if( c == nullptr )
      std::cout << "C is null";
   getchar();
    return 0;
}

enter image description here

如果你在上面的图片中看到,a不是null,并且有一些垃圾值。

我知道这是非常天真的代码,但这显示了我对实际代码的问题。

谢谢, 凯拉斯

2 个答案:

答案 0 :(得分:3)

不,您无法知道指针是否指向有效内存。

来自here

  

因为维护关于什么的元数据会很昂贵   构成一个有效的指针,什么不是,在C ++中你不付钱   因为你不想要的东西。

此外,您并不需要检查指针是否有效,因为您作为程序员知道指针的来源。

答案 1 :(得分:-5)

您可以使用if(!a)if(a)进行验证。