次のようにコーディングします。
char *p=malloc(200);
p=NULL;
NULLを取得したのでp
、これらの200バイトのメモリを再び使用できる方法はありますか?そうでない場合、少なくともそれらを解放できますか?
次のようにコーディングします。
char *p=malloc(200);
p=NULL;
NULLを取得したのでp
、これらの200バイトのメモリを再び使用できる方法はありますか?そうでない場合、少なくともそれらを解放できますか?
p=NULL;
使用する前にfree(p);
しかし、ポインタを NULL に割り当てると、メモリを解放する前にメモリが失われます...
いいえ、寄付したときに誰にも寄付することはできません。
p = NULL;
そして、誰も利己的ではないので、彼はあなたに与えられたものを何も返しません。彼は、プログラムが終了し、アプリケーションが実行されているプロセスが終了したときにのみ、OSに返します。
メモリ位置を保持するには常にポインタが必要です。そうしないと、元に戻すことができません。
char *p=malloc(200);
char *p2 = p;
p = NULL;
free(p2);
現状では、その記憶を取り戻す方法はありません。あなたはそれを失うのを防ぐことができますが、それを取り戻すことはできません。唯一のオプションは、プログラムを終了することです。
これは、 Boehm-Demers-Weiser コレクターなどのガベージ コレクターを使用する場合にのみ可能です。ガベージ コレクタを使用できない場合、メモリを再利用することはできません。
もちろん、 をfree(p)
設定する前に呼び出すと、メモリが再利用されますp = NULL
が、それは既にわかっています。
さらに、プロセスが終了した場合、またはプロセスが終了した場合、メモリはオペレーティングシステムによって自動的に再利用されexec()
ます。