2017-11-13 16 views
-2

ループ内で同じ変数を複数回mallocすることはできますか?新しいメモリアドレスを割り当てますか?同じ変数をcで複数回mallocing

int* var; 
int i; 
for(i = 0; i < 5; i++) 
{ 
    var = (int*)malloc(sizeof(int)); 
} 

これは私がそれを解放することができ、起こさないように、アドレスがリンクリストに再割り当てられる状況で使用することになり、これは私が実際にそれを使用する方法ではない、新しい領域を割り当てるんメモリアドレス。

+4

はい、あなたは新しい割り当てを毎回取得します。そして、前のものを漏らす。 –

+0

はい、漏れを避けるために、 'var'を再読み込み/再読み込みする前に、古い値へのポインタをどこかに保持する必要があります。以下の@ Unh0lys0daによって答えられるように、 –

+1

あなたは「変数をmallocingしていません」。あなたのコードは5つの別個のメモリ領域を割り当て、あなたはそのうちの4つのアドレスを失いました。 5番目のアドレスは変数 'var'に保持されます。 –

答えて

2

はいこれは、再割り当てする前に変数を使用している限り、問題ありません。 「何か」とは、ポインタを再割り当てする前にコピーを作成し、後でそのコピーを無料で呼び出すことです。

0

ループ内で同じ変数を複数回mallocすることはできますか?新しいメモリアドレスを割り当てますか?

mallocブロックの先頭へのポインタを返す、メモリのサイズバイトのブロックを割り当てます。だから、このforループで:すべての反復で

for(i = 0; i < 5; i++) 
{ 
    var = (int*)malloc(sizeof(int)); 
} 

mallocは、メモリの新しいブロックを割り当てているとvar変数に割り当てられてきているブロックの先頭へのポインタを返します。しかし、「アドレスがリンクリストに再割り当てされます。」という質問では、割り当てられたメモリ参照をどこかに保持しているとします。これは、この同じくらい良いです

:すべての反復で

int somevalue; 

for(i = 0; i < 5; i++) 
{ 
    somevalue = i+10; //Just assigning a value to variable 
} 

、新しい値はsomevalue変数に割り当てられてきています。ループが終了すると、変数somevalueはループの最後の反復で割り当てられた値になります。

が、これは新しい領域を割り当てない...

はい、限りmallocが成功したとして。


追加注:

mallocリターンをキャストしないでください。 Check this

だから、あなたがする必要があります

for(i = 0; i < 5; i++) 
{ 
    var = malloc(sizeof(int)); 
} 
関連する問題