未定義の動作を理解する: C での Null ポインター メソッド呼び出し
C では、Null ポインターを処理するときにプログラムの実行が予期しない方向に進む可能性があります。これは、次のコード スニペットに示すように、メソッドが null ポインターを介して呼び出される場合に明らかです。
<code class="cpp">#include <iostream> using namespace std; class Test { int i; public: Test() : i(0) { cout << "ctor called" << endl; } void show() { cout << "show fun called" << endl; } }; int main(int argc, char *argv[]) { Test *ptr = NULL; ptr->show(); return 0; }</code>
予期せず、show() メソッドにアクセスしようとしたにもかかわらず、コンストラクター関数が呼び出されません。 null ポインタ ptr を介して。この動作は、コンパイラが null ポインタの型を判断できるため、show() メソッドを識別できるようになります。このメソッドは this ポインターを利用しないため、コードはスムーズに実行されます。
便利ではありますが、この動作は C 標準では未定義とみなされます。コンパイラは、異なる動作をしたり、プログラムをクラッシュさせたりする可能性のあるコードを自由に生成します。したがって、そのような動作に依存するのは賢明ではなく、予測できない結果を招く可能性があります。
したがって、 C では null ポインターを介してメソッドを呼び出すことを避けることが重要です。未定義の動作を回避し、プログラムの整合性を維持するために、ポインターの適切な初期化を常に確保してください。
以上がC で Null ポインターでメソッドを呼び出すと機能する場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。