C の free() 関数の動作について一般的な質問があります。
それを呼び出すfree()
と、ポインターが指すメモリが解放されるだけで、ポインターはそのままになると思いますか?
つまり、ポインターを再利用したい場合は、ポインターを再初期化する必要はなく、メモリを再割り当てするだけで済みますか?
たとえば、このコードは合法でしょうか?
元のバージョン
void foo()
{
data_t *x;
int y = 0;
while(x->data != some_value)
{
x = some_function(y);
y = some_other_function(x);
free(x);
}
}
修正版
void foo()
{
data_t *x;
int y = 0;
x = some_function(y);
while(x->data != some_value)
{
y = some_other_function(x);
free(x);
x = some_function(y);
}
}
実際のコード (および の内部構造) を無視し、適切にsdata_t
と仮定します。これがメモリを管理する適切な方法であるかどうかを知りたいだけですか、それとも解放するたびに再初期化する必要がありますか?some_function()
malloc()
x
data_t *x
編集:コードが私の質問を適切に示していないことに気付いたので、コードを編集しました。