関数内の変数 x を解放する必要がありますか?
はい(ちょっと、私の後のコメントを見てください)。を呼び出すたびにmalloc
、後で を呼び出す必要がありますfree
。そうしないと、リークがあります。ただし、覚えておいてください。x
x が参照するメモリを解放しているのです 。
値(アドレス) のx
コピーを返すと、が作成され、呼び出し元に返されます。 自動保存期間で宣言されました。解放する必要があるのは、それが参照するメモリです。x
x
もしそうなら、私がそれを返す必要があるときにそれはどのように可能ですか.
あなたの設計は、呼び出し元にメモリを解放する責任を負わせています。あなたはすでにメインでこれを行っています。もちろん、このメソッドを使用するには、動的に割り当てられたメモリへのアドレスを受け取っていることをコードのユーザーが認識できるように、関数を文書化する必要があります。
より良いアプローチ (IMO) は、バッファーを入力パラメーターとして使用することです。これで、このメモリの管理責任者 (呼び出し元) が明確になりました。おそらく、動的に割り当てたくさえありません。このデザインで、それは私の選択です。
void f(char *buf, size_t buf_size) {
strncpy(buf, "abc", buf_size - 1);
buf[buf_size-1] = '\0';
}
補足として、常に の戻り値をチェックする必要がありますmalloc
。失敗する可能性があり、その場合は null ポインターが返されます。また、sizeof(char)
は標準であることが保証され1
ているので、そのビットを削除してmalloc(n)
.