我们可以检查一个指针以确保它是一个有效的地址吗?

时间:2013-11-20 16:38:04

标签: c++ pointers memory-address

我的想法是打印它指向的对象。 我认为有效的指针应该有一个有效的对象。 如果我们尝试打印出对象,我们会验证指针是否有效。 我是对的吗?

2 个答案:

答案 0 :(得分:1)

  

我认为有效指针应该有一个有效的对象。

是的,这是有效指针的定义。

  

如果我们尝试打印出对象,我们会验证指针是否有效。

不幸的是,你做不到。您可以检查指针是否为空;但是如果没有正确初始化,或者它指向一个被销毁的对象,那么它既不是有效的也不是空的。

如果你想要一个足够智能的指针来知道它是否有效,你需要一个智能指针。

答案 1 :(得分:0)

您的代码应该智能跟踪指针并避免使用未分配或未初始化的指针。有效性或无效性是代码中的相对概念。尝试使用智能指针。

对于裸指针,如果您不知道指针将来是否会被初始化,则可以将它们初始化为null。然后在使用指针之前,您可以检查它是否为空。

但这还不够,格式错误的代码可能有无效的指针,程序员会发现它们很难。例如,考虑返回指向退出函数后将要销毁的本地临时对象的指针。因此,您应该在代码中管理它们。

首先尝试避免指针。如果您需要它们,请使用智能指针。如果你必须使用裸指针编写格式良好的代码并通过正确使用分配/释放和空值来跟踪指针。