次のようなポインターを宣言するときに free() を使用する必要があるのはなぜですか。
int *temp = (int*)malloc(sizeof(int))
*temp = 3;
しかし、私がするときではありません:
int temp = 3;
通常の宣言はスタックに置かれます。関数が戻ると、スタック ポインターは関数が呼び出される前の値に戻るため、メモリは自動的に再利用されます。
Malloc ベースの宣言は「ヒープ」から割り当てられるため、プログラマは割り当てと割り当て解除を管理する必要があります。
必要性は、ポインタを宣言したかどうかに依存するのではなく、メモリを edfree()
したかどうかに依存します。malloc()
Brian Bondy が前に言ったように、変数 (" int number
"、" char string[10]
"、" float your_boat
" など) は、コードが関数ブロックを離れるときのように、スコープから外れると消えます。したがって、質問のポインター (" temp
") は、呼び出しても消えませんfree()
。むしろ、呼び出し時に割り当てられたコードはすべてmalloc()
消えます。ポインタはまだそこにとどまります。つまり、サンプル コードの直後に、temp = &some_other_variable
(再び) " int *temp;
" と言わなくても " " と言うことができます。
誰かが関数を実装したことがあり、その関数がたまたま を呼び出しmalloc()
、それがプログラムのメモリを要求し、そのデータを解放する必要がなかった場合、次のように言うことができます。
int * temp = (int*)malloc(sizeof(int));
後で言わずに
free(temp);
しかし、それmalloc()
は実装されている方法ではありません。