で割り当てたメモリを解放しようとしていますが、Eclipse のデバッガによるとmalloc
、free
コマンドが適切に機能していないようです。これはどのように可能ですか?
以下は、おそらく解放された後のデバッガーのスクリーンショットですが、seCurrent->student->year
明らかにそうではありません。year
を使用して割り当てられmalloc
ました。
で割り当てたメモリを解放しようとしていますが、Eclipse のデバッガによるとmalloc
、free
コマンドが適切に機能していないようです。これはどのように可能ですか?
以下は、おそらく解放された後のデバッガーのスクリーンショットですが、seCurrent->student->year
明らかにそうではありません。year
を使用して割り当てられmalloc
ました。
free() は通常、プログラム内の値を変更しません。C ランタイム ヒープを調整するだけです。これは、解放されたばかりのメモリ内の値が保持されることを意味します。ただし、コードからそれらにアクセスしようとすると、未定義の動作が発生します。
それが解放されていないと思う理由は何ですか?メモリを解放するということは、その後プログラムからメモリにアクセスすることは未定義の動作であり、次に malloc を呼び出すときにメモリを再利用できることを意味します。解放したメモリに格納されたデータを上書きしたり、デバッガが未割り当てのメモリを読み取ったりすることを約束するものではありません。
Free は、割り当てられた領域をヒープに戻して後続の malloc で再利用しますが、以前にそのメモリを参照していたポインタの値は変更しません。あなたの場合、他の malloc はまだ実行されていないため、解放されたばかりのメモリは、free の呼び出しの直前と同じです。ポインターに関連付けられたデータがなくなったことをコードが認識できるようにするために、ポインターにnull
関連付けられたメモリを解放した後で、ポインターを に設定することができます。
メモリをmalloc()
使用すると、メモリ内の空きスペースを検索し、現在使用されていることを追跡するだけです。初期化などはしません。
を呼び出すとfree()
、使用中のメモリ ブロックのリストからこのメモリ ブロックがクリアされるだけです。繰り返しますが、内容は変更されません。