Как проверить, является ли указатель нулевым в C ++ Visual 2010 - PullRequest
1 голос
/ 18 марта 2010

У меня проблемы здесь, если я хочу проверить, указывает ли eerste на что-либо, что я получаю

Blockquote

Необработанное исключение в 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 ]

10 голосов
/ 18 марта 2010

Я думаю, что вы должны изменить

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

потому что они, вероятно, объявлены в вашем классе как переменные-члены, а вы объявляете их как локальные переменные.

Как предложил Фред Ларсон, вы также можете использовать списки инициализации.

Bank::Bank() : eerste(NULL), laatste(NULL)  
{
//whatever else you are planning to do in your constructor
}
6 голосов
/ 18 марта 2010

eerste и laatste - это не переменные-члены вашего класса Bank, а локальные переменные конструктора (даже если члены определены, локальные переменные переопределяют их в конструкторе - поэтому фактические переменные-члены остаются неназначенными)

Я бы предложил использовать соглашение об именах (добавить префикс m_ к переменным-членам) и простой список инициализации:

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

  private:
    LijstElement *m_eerste;
    LijstElement *m_laatste;

};
1 голос
/ 18 марта 2010

Синтаксис в вашем конструкторе предполагает, что eerste и laatste не являются переменными-членами (и поэтому недопустимы для ссылки в getRekening.)

Не могли бы вы опубликовать правильный код, включая часть в заголовочном файле?

Edit: кроме этого, похоже, что вы пытаетесь использовать неинициализированный указатель. (Который указывает ни на что, кроме NULL.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...