ホームページ  >  記事  >  バックエンド開発  >  C でポインタが指すメモリを削除すると、ポインタはどうなりますか?

C でポインタが指すメモリを削除すると、ポインタはどうなりますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 01:48:02993ブラウズ

What Happens to Pointers After Deleting the Memory They Point To in C  ?

削除後の C でのポインターの動作

C では、ポインターを削除すると、ポインターが指すメモリーの割り当てが解除されます。ただし、その削除されたメモリを指すポインタの動作は、C バージョンに応じて未定義または実装定義になります。

次のコードを考えてみましょう。

<code class="cpp">A* a = new A();
A* b = a;

delete a;

A* c = a; // Assuming undefined or implementation-defined in C++11
A* d = b; // Supposed to be legal</code>

Reading Value of削除されたポインタのコピー (b)

C 11 では、a が削除された後に b の値を読み取ります。削除は未定義の動作です。ただし、C 14 では実装定義です。これは、a が削除されると、ポインタ b 自体が「無効なポインタ値」になるためです。

実装定義の動作

C 14 では、無効なポインタ値を使用していますコピーを含む、実装定義の動作があります。これは、そのような場合にどうするかをコンパイラーが決定できることを意味します。一部の実装では、実行時エラーが生成される場合がありますが、他の実装では、操作は許可されても、その後ポインターが使用されると未定義の動作が発生する場合があります。

合法か未定義ですか?

したがって、両方の A* c = a;そしてA* d = b;コピーされたポインタ値 (b) は無効なポインタ値とみなされ、その使用は実装の定義に従います。

以上がC でポインタが指すメモリを削除すると、ポインタはどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。