重複の可能性:
NULL ポインターでのクラス メンバーへのアクセス
NULL ポインターを逆参照すると、プログラムがクラッシュしたり、未定義の動作が発生したりすることはわかっています。しかし、次のプログラムは、This is a car
実行した回数を一貫して出力します。Linux (g++) および AIX (xlc++) でチェック済み。
#include <iostream>
using namespace std;
class Car
{
public:
void display(){ cout << "This is a car" << endl; }
};
int main()
{
Car *c = NULL;
c->display();
}
クラスに 1 つのデータ メンバーを追加して、その値を出力しようとすると、プログラムがクラッシュします。
class Car
{
int i;
public:
void display(){ cout << "This is a car" << i << endl; }
};
したがって、NULL ポインターを逆参照して、クラスのデータ メンバーにアクセスしないメンバー関数を呼び出すことは問題ないようです。それは本当に未定義の動作ですか?