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

mar*_*rio 1 c++ pointers

我在这里遇到问题,如果我想检查一下eerste我得到什么

大段引用

Bank.exe中0x003921c6处的未处理异常: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;   
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*cas 10

我想你必须改变

Bank::Bank()
{
    eerste = NULL;
    laatste = NULL;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 更好的是,让它们成为初始化者. (3认同)

Mac*_*iek 6

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

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

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

  private:
    LijstElement *m_eerste;
    LijstElement *m_laatste;

};
Run Code Online (Sandbox Code Playgroud)

  • 你的意思是"隐藏",而不是"覆盖". (2认同)