C の解放されたメモリへのポインター
ポインターを削除した後、同じオブジェクトを参照する他のポインターの有効性に関して混乱が生じます。この記事の目的は、C でのこの動作を明確にすることです。
次のコードを考えてみましょう:
<code class="cpp">A* a = new A(); A* b = a; delete a; A* c = a; // Illegal (C++11) A* d = b; // Debatable legality // Points to deallocated memory, Undefined in C++11 A* aAddr = &a;</code>
C 11 の動作:
C 14 動作:
C 11 標準によれば、無効なポインター値を使用すると (コピーを含む)、未定義の動作が発生します。 C 14 では、このような操作は実装定義の動作を持ちます。つまり、動作はコンパイラやオペレーティング システムによって異なる可能性があります。
したがって、C 11 と C 14 の両方で、以前に定義されたポインタの使用を避けることが重要です。削除されるか、割り当て解除されたメモリを参照します。そうすると、予測できない、潜在的に誤った動作が発生する可能性があります。
以上がC でポインターが削除された後、同じオブジェクトを参照しているポインターはどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。