delete を使用した配列の削除は delete[] と同等ですか?
動的配列を扱う場合、削除と削除の違いを理解することが重要ですdelete で個々の要素を削除し、配列全体を削除するにはdelete[].
ptr を削除すると未定義の動作が発生する理由
提供されたコード内:
IP_ADAPTER_INFO *ptr = new IP_ADAPTER_INFO[100];
ptr は 100 の配列を指しますIP_ADAPTER_INFO 構造体。 delete ptr を使用してポインターを削除することは、配列の最初の要素を削除することと同じです。ただし、残りの 99 要素は割り当てられたままになります。これにより、メモリ リークが発生する可能性があります。
逆アセンブリ コード分析
delete ptr と delete []ptr 用に Visual Studio 2005 によって生成された逆アセンブリ コードは、違いを明確に示しています。
結論
未定義の動作を回避し、メモリ リークを防止します。new で動的に割り当てられた配列の割り当てを解除するには、常に delete []ptr を使用します。一部のコンパイラは delete ptr を適切に処理する可能性がありますが、これは信頼性が低いため、避けるべきです。
以上が`delete ptr` と `delete[] ptr`: なぜ一方は安全で、もう一方はメモリ リークとなるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。