ループ内で同じ変数を複数回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));
}
はい、あなたは新しい割り当てを毎回取得します。そして、前のものを漏らす。 –
はい、漏れを避けるために、 'var'を再読み込み/再読み込みする前に、古い値へのポインタをどこかに保持する必要があります。以下の@ Unh0lys0daによって答えられるように、 –
あなたは「変数をmallocingしていません」。あなたのコードは5つの別個のメモリ領域を割り当て、あなたはそのうちの4つのアドレスを失いました。 5番目のアドレスは変数 'var'に保持されます。 –