1

重複の可能性:
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 ポインターを逆参照して、クラスのデータ メンバーにアクセスしないメンバー関数を呼び出すことは問題ないようです。それは本当に未定義の動作ですか?

4

0 に答える 0