如何检查指针是否仍指向C ++中的有效内存?

时间:2014-04-12 21:16:12

标签: c++ pointers

我有一个等于另一个指针的指针

我想检查我的指针是否等于非空指针。

int* ptr0 = new int(5);
int* ptr1 = ptr0;

delete ptr0;

if ( ?? )
{
    std::cout << "ptr1 equals to a null ptr" << std::endl;
}

我应该在条件下写什么?

知道:

  • 不想在删除后设置nullptr 任何一个ptr
  • 无法访问以符合我的条件

3 个答案:

答案 0 :(得分:6)

shared_ptr<T>weak_ptr<T>结合使用。

例如,

int main() {
    std::tr1::shared_ptr<int> ptr0(new int);
    std::tr1::weak_ptr<int> ptr1_weak(ptr0);

    *ptr0 = 50;

    // Depending on if you reset or not the code below will execute
    //ptr0.reset();

    if (std::tr1::shared_ptr<int> ptr1 = ptr1_weak.lock()) {
        std::cout << "Changing value!" << std::endl;
        *ptr1 = 500;
    }
}

答案 1 :(得分:1)

你做不到。虽然理论上你可以根据new的实现,检查指向的内存当前是否正在使用,但是没有办法确认它仍然是你原来只使用原始指针指向的对象。

你可以使用C ++ 11智能指针来做类似的事情,但我真的不认为这是你真正想做的事情。

答案 2 :(得分:1)

delete不会产生空指针。它导致悬挂指针,一般无法检测到。所以,你不能。