2016-03-23 11 views
0

次のコードの出力は何ですか?必要なヘッダーが含まれているとします。これには未定義の動作がありますか?

これは未定義の動作につながりますか? g ++でコンパイルして実行すると、 "test"が出力されます。

class A { 
public: 
    void test() 
    { 
     printf("test\n"); 
    } 
}; 

int main() 
{ 
    A *pa = NULL; 
    pa->test(); 
} 
+0

'g ++でコンパイルして実行すると、" test "が出力されます。UBは常にクラッシュするとは限りません。実際には、多くのプラットフォームで動作する可能性があります。とにかくUBです。 – Matt

答えて

3

NULLポインタの参照は、未定義の動作です。したがって、あなたの例は未定義の動作も示します。

+0

'test'がインスタンスのデータメンバーにアクセスしないので、与えられた環境で動作すると思います... – Codor

+2

そうかもしれません。しかし、この環境で動作する理由についての推測は、実際のコードでこの例を使用するべきではないので、実用的なコーディングではあまり役に立ちません。 – owacoder

+0

いいえ、あなたはまったく正しいです。私はちょうど不思議だった。 – Codor

関連する問題