2012-03-24 10 views
0

私の質問は、割り当てられた変数がメモリを解放せずに再度mallocされた場合、ガベージコレクタはメモリを解放します。ガベージコレクタと二重に割り当てられたメモリ

例:この場合

ptr1 = malloc(100) 
ptr1 = malloc(200) 

最初に割り当てられたメモリは、ガベージコレクタによって割り当て解除されます? はいの場合はいつ.. ???

+0

申し訳ありませんが、しかし、あなたはと混同どの言語ですか?セミコロンの欠如はJavascriptを示唆しています、そうかもしれませんか? –

+2

+1は愚かな匿名のdownvoteを補うために+1。兆候は犯罪ではない&それがあったならば存在しませんでした。 –

+0

Cはガベージコレクションを提供しませんが、それはまさにその機能です。 ptr1が上書きされると、もともとptr1が指し示すメモリブロックには 'free for collection'とマークされます。 – guga

答えて

5

いいえ、メモリリークが発生します。

Cにガベージコレクタがありません。
自分でメモリ管理を行う必要があります。

ptr1 = malloc(100); 
free(ptr1); 
ptr1 = malloc(200); 
... 
... 
free(ptr1); 
+0

ガベージコレクタが存在するそれはメモリを解放します..? – goutham

+0

@ goutham:Qは仮説です。答えはガベージコレクタが良いなら、それはそうです。[Boehmガベージコレクタ](http://www.hpl.hp。 com/personal/Hans_Boehm/gc /)を参照してください。 –

1

1

CはガベージコレクタはありませんC.には、ガベージコレクタはありません。表示されたコードはメモリリークを引き起こします。

あなたはfree()とメモリ割り当て解除のための責任があります:

ptr1 = malloc(100); 
free(ptr1); 
ptr1 = malloc(200); 
関連する問題