ホームページ > バックエンド開発 > C++ > C では `delete ptr` と `delete[] ptr` をいつ使用する必要がありますか?

C では `delete ptr` と `delete[] ptr` をいつ使用する必要がありますか?

DDD
リリース: 2024-12-29 03:28:14
オリジナル
274 人が閲覧しました

When Should I Use `delete ptr` vs. `delete[] ptr` in C  ?

構文 delete ptr は delete[] ptr と同等ですか?

delete と delete[] の違いは微妙に見えるかもしれませんが、これは C のメモリ管理にとって重要です。

次のコードを考えてみましょう。スニペット:

IP_ADAPTER_INFO *ptr = new IP_ADAPTER_INFO[100];
ログイン後にコピー

このコードは、new を使用して 100 個の IP_ADAPTER_INFO 構造体の配列を割り当てます。このメモリの割り当てを解除するには、適切な削除構文を使用する必要があります。

delete ptr の使用:

delete ptr;
ログイン後にコピー

この構文は正しくありません。 ptr はオブジェクトの配列を指すため、delete[] を使用して削除する必要があります。これを行わないと、未定義の動作が発生し、メモリ リークやその他の予期しない結果が発生する可能性があります。

delete[] ptr の使用:

delete[] ptr;
ログイン後にコピー

この構文は次のとおりです。正しい。 delete[] は配列の割り当てを解除するために使用されます。配列内の各要素に対して適切なデストラクターを呼び出し、配列全体に割り当てられたメモリを解放します。

逆アセンブリ コード分析:

提供された逆アセンブリ コードは、 delete ptr と delete[] ptr の違い。

delete ptr の場合、operator delete への呼び出しが 1 回行われます。これは、単一のオブジェクトを削除しようとしていることを示します。

delete[] ptr の場合、オペレータ delete[] の呼び出しが行われ、オブジェクトの配列を削除しようとしていることを示します。

結論:

メモリ リークと未定義の動作を回避するには、正しい削除構文を使用することが重要です。配列。 delete ptr は単一オブジェクトの削除に使用する必要があり、delete[] ptr は配列の削​​除に使用する必要があります。

以上がC では `delete ptr` と `delete[] ptr` をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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