に私がリンクリストを実装しただけで頭=頭部>次の(代わりに頭の= old->次)をしない理由を私は、思っていました前のアドレスを指しているものがない場合(ヘッドノードのヘッドが現在次のノードを指しているため)、メモリリークがどのように発生しますか?ポインタは、連結リストの例
ありがとうございました。
に私がリンクリストを実装しただけで頭=頭部>次の(代わりに頭の= old->次)をしない理由を私は、思っていました前のアドレスを指しているものがない場合(ヘッドノードのヘッドが現在次のノードを指しているため)、メモリリークがどのように発生しますか?ポインタは、連結リストの例
ありがとうございました。
C++には、参照されなくなったストレージを解放する他の言語のような自動ガベージコレクションはありません。これにはいくつかの理由があり、そのトピックに関する議論はWhy doesn't C++ have a garbage collector?にあります。
これは、new
であることがdelete
dであること、または漏れがあることを意味します。
は、ノード1のアドレスはもはや作り、知られている
、あなたがhead
を上書きする前に
head
のない
delete
元の値を行う場合は、
を持っていると言うんそれはdelete
するために割り当てを追跡することは不可能に隣接しています。これは漏れを強制する。
しかし、あなたは次のノードを見つけることができませんhead->next
、あなたが全体のリストを失い、リークし、再指し、それ以前にあなたdelete head
場合
。
しかし、あなたは、このケースで
old
をhead
のアドレスの一時的なコピーを作成する場合は、次のことができ、安全に再ポイントhead
、まだ割り当てのアドレスがdelete
になる必要があります。old
に格納されています。
私が見ていたコードは、これはエラーですが、 'new'で頭を作成していませんでしたか? – coder666
@ coder666あなたは本当に 'head'を削除していません。 'head'が指しているものを削除しています。 'head'は任意の' Node'を指すことができ、 'head'が' new'によって作成された 'Node'を指している場合、誰かが遅くまたは遅く' delete'する必要があります。キーワード: "Ownership semantics"。この場合、リンクされたリストは 'Node'の所有者であり、' head'はリンクされたリストが 'Node'への参照を格納する場所です。 'head'自体は、範囲外になったときに自動的に処理される自動変数です。 – user4581301
私はそれを手に入れます!ありがとうございました ! – coder666
これらの3行は残っているが、2行目の行が古い行に変更されている場合、コードは同じになり、メモリリークは発生しません。 –