-1

次のようにコーディングします。

char *p=malloc(200);
p=NULL;

NULLを取得したのでp、これらの200バイトのメモリを再び使用できる方法はありますか?そうでない場合、少なくともそれらを解放できますか?

4

5 に答える 5

3

p=NULL; 使用する前にfree(p);

しかし、ポインタを NULL に割り当てると、メモリを解放する前にメモリが失われます...

于 2013-02-04T09:33:45.260 に答える
2

いいえ、寄付したときに誰にも寄付することはできません。

p = NULL;

そして、誰も利己的ではないので、彼はあなたに与えられたものを何も返しません。彼は、プログラムが終了し、アプリケーションが実行されているプロセスが終了したときにのみ、OSに返します。

于 2013-02-04T09:33:18.627 に答える
2

メモリ位置を保持するには常にポインタが必要です。そうしないと、元に戻すことができません。

char *p=malloc(200);
char *p2 = p;
p = NULL;
free(p2);   
于 2013-02-04T09:39:55.467 に答える
1

現状では、その記憶を取り戻す方法はありません。あなたはそれを失うのを防ぐことができますが、それを取り戻すことはできません。唯一のオプションは、プログラムを終了することです。

于 2013-02-04T09:32:49.120 に答える
0

これは、 Boehm-Demers-Weiser コレクターなどのガベージ コレクターを使用する場合にのみ可能です。ガベージ コレクタを使用できない場合、メモリを再利用することはできません。

もちろん、 をfree(p)設定する前に呼び出すと、メモリが再利用されますp = NULLが、それは既にわかっています。

さらに、プロセスが終了した場合、またはプロセスが終了した場合、メモリはオペレーティングシステムによって自動的に再利用されexec()ます。

于 2013-02-04T09:34:21.327 に答える