如何在C ++ Visual 2010中检查指针是否为空

时间:2010-03-18 13:00:14

标签: c++ pointers

如果我想检查eerste是否指向我

,我在这里遇到问题
  

块引用

     

0x003921c6处的未处理异常   Bank.exe:0xC0000005:访问冲突   读取位置0xccccccd0。

我有点想知道为什么他只是跳过if语句或者当对象eerste指向什么时不停止

Bank::Bank()
{
 LijstElement *eerste = NULL;
 LijstElement *laatste = NULL;
}

 Rekening * Bank::getRekening(int rekNr)
{

 if(NULL != eerste)
 {
  LijstElement *nummer = eerste;
  while(nummer->volgende!= NULL)
  {
   Rekening *een = nummer->getRekening();
   if(een->getRekNr()==rekNr)
    {
     return een;
    }
   else
   {
    nummer = nummer->volgende;
   }
  }
 }
 return NULL;   
}

3 个答案:

答案 0 :(得分:10)

我认为你必须改变

Bank::Bank()
{
    eerste = NULL;
    laatste = NULL;
}

因为它们可能在您的类中声明为成员变量,并且您将它们声明为局部变量。

正如Fred Larson所提议的,您也可以使用初始化列表。

Bank::Bank() : eerste(NULL), laatste(NULL)  
{
//whatever else you are planning to do in your constructor
}

答案 1 :(得分:6)

eerste和laatste不是你的Bank类的成员变量,而是构造函数的局部变量(即使定义了成员,本地变量也会在构造函数中覆盖它们 - 所以实际的成员变量保持未分配状态)

我建议使用命名约定(向成员变量添加m_前缀)和一个简单的初始化列表:

class Bank
{
public:     
  Bank() : m_eerste(NULL), m_laatste(NULL)
  {}

  private:
    LijstElement *m_eerste;
    LijstElement *m_laatste;

};

答案 2 :(得分:1)

构造函数中的语法表明eerstelaatste不是成员变量(因此在getRekening中引用是非法的。)

您能否发布正确的代码,包括头文件中的部分?

编辑:除此之外,看起来你正试图使用​​未初始化的指针。 (它指向什么,但也不是NULL。)