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

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

Mary-Kate Olsen
リリース: 2024-11-01 01:48:02
オリジナル
1074 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート