私の質問は、割り当てられた変数がメモリを解放せずに再度mallocされた場合、ガベージコレクタはメモリを解放します。ガベージコレクタと二重に割り当てられたメモリ
例:この場合
ptr1 = malloc(100)
ptr1 = malloc(200)
最初に割り当てられたメモリは、ガベージコレクタによって割り当て解除されます? はいの場合はいつ.. ???
私の質問は、割り当てられた変数がメモリを解放せずに再度mallocされた場合、ガベージコレクタはメモリを解放します。ガベージコレクタと二重に割り当てられたメモリ
例:この場合
ptr1 = malloc(100)
ptr1 = malloc(200)
最初に割り当てられたメモリは、ガベージコレクタによって割り当て解除されます? はいの場合はいつ.. ???
いいえ、メモリリークが発生します。
Cにガベージコレクタがありません。
自分でメモリ管理を行う必要があります。
ptr1 = malloc(100);
free(ptr1);
ptr1 = malloc(200);
...
...
free(ptr1);
ガベージコレクタが存在するそれはメモリを解放します..? – goutham
@ goutham:Qは仮説です。答えはガベージコレクタが良いなら、それはそうです。[Boehmガベージコレクタ](http://www.hpl.hp。 com/personal/Hans_Boehm/gc /)を参照してください。 –
CはガベージコレクタはありませんC.には、ガベージコレクタはありません。表示されたコードはメモリリークを引き起こします。
あなたはfree()
とメモリ割り当て解除のための責任があります:
ptr1 = malloc(100);
free(ptr1);
ptr1 = malloc(200);
申し訳ありませんが、しかし、あなたはと混同どの言語ですか?セミコロンの欠如はJavascriptを示唆しています、そうかもしれませんか? –
+1は愚かな匿名のdownvoteを補うために+1。兆候は犯罪ではない&それがあったならば存在しませんでした。 –
Cはガベージコレクションを提供しませんが、それはまさにその機能です。 ptr1が上書きされると、もともとptr1が指し示すメモリブロックには 'free for collection'とマークされます。 – guga