私はC++のdelete []演算子について疑問に思います。 (私はVisual Studio 2005を使用しています)。delete []とメモリリーク
管理対象DLLによって呼び出されているアンマネージDLLがあります。デバッグ中にいくつかのタスクを実行した後にこのプログラムを終了すると、サイズが44バイト(24バイト〜44バイト)のメモリリークが数多く発生しています。私は、次のコードがあれば私が理解から、とにかく
、:そして、すべてのメモリを
char* pointer = new char[500]
/* some operations... */
delete[] pointer;
を、それが正しく解放されるために、私は右ですか?
char* pointer = new char[500];
char* pointerIt = pointer;
/* some code perhaps to iterate over the whole memory block, like so */
for (int i = 0; i < 250; i++){ // only iterate halfway
*pointerIt = 0;
pointerIt++;
}
delete[] pointer;
メモリを指さポインタだけ右に削除されます。私は、次のコードを持っているときに何が起こるか
?ポインタが有効なメモリを指していないことを意味します。しかし、両方のポインタをNULLに設定することができます
char* pointerFirstPosition = new char[500];
char* pointerIt = pointerFirstPosition;
for (int i = 0; i < 250; i++){ // only iterate halfway
*pointerIt = 0;
pointerIt++;
}
delete[] pointerIt; // delete the pointer iterator...
このコードはpointerIt 500までpointerItによって指さにメモリブロックを削除します:私はこれを行う場合
とにかく、何が今、どうなりますか?またはpointerFirstPosが指すメモリブロックをpointerFirstPos + 500に削除しますか?
メモリリークが発生する可能性がありますか?
申し訳ありませんが、長いメッセージのために、メッセージをはっきりと伝えようとしています。
おかげで、
クレブス
「しかし、私は右、NULLに両方のポインタを設定することができるので、それは大丈夫です?」さて、あなたはポインタを使って行うべきです... – GManNickG