関数に次のものがある場合:
struct example *A=malloc(sizeof(struct example));
A が指す場所に作成されたノード/メモリ空間は、関数の終了/終了後に破棄されますか? それともヒープに残りますか?
関数に次のものがある場合:
struct example *A=malloc(sizeof(struct example));
A が指す場所に作成されたノード/メモリ空間は、関数の終了/終了後に破棄されますか? それともヒープに残りますか?
いいえ。によって割り当てられたメモリは、 'dmallocまで割り当てられたままになります。free
このようなことをする:
char * function(void)
{
char c = 'a';
return &c;
}
一方、このオブジェクトは関数の終了時にスコープ外になるため、問題があります。
mallocヒープにメモリを割り当てます。変数を宣言すると、スタックにスペースが割り当てられます。スタックはスコープの影響を受けますが、ヒープは影響を受けません。
mallocメモリリーク(永久に存続するようにメモリへの参照を失うプロセス)などのさまざまな落とし穴を含む、ポインタの使用に関する追加情報については、このリンクにアクセスしてください。
あなたはあなたがするfreeすべてのものを持っていますmalloc。関数が戻ると、変数Aはスコープ外になりますが、メモリは割り当てられたままになります。(他の場所に保存されていない限り)メモリへのポインタを失ったため、メモリリークが発生しています。
が指すメモリがまだ必要な場合はA、割り当てられた構造体へのポインタを返し、後で解放することができます。関数が戻った後で割り当てられたメモリが必要ない場合は、。を使用してメモリを解放しますfree(A)。