1

関数に次のものがある場合:

struct example *A=malloc(sizeof(struct example));

A が指す場所に作成されたノード/メモリ空間は、関数の終了/終了後に破棄されますか? それともヒープに残りますか?

4

2 に答える 2

1

いいえ。によって割り当てられたメモリは、 'dmallocまで割り当てられたままになります。free

このようなことをする:

char * function(void)
{
    char c = 'a';
    return &c;
}

一方、このオブジェクトは関数の終了時にスコープ外になるため、問題があります。

mallocヒープにメモリを割り当てます。変数を宣言すると、スタックにスペースが割り当てられます。スタックはスコープの影響を受けますが、ヒープは影響を受けません。

mallocメモリリーク(永久に存続するようにメモリへの参照を失うプロセス)などのさまざまな落とし穴を含む、ポインタの使用に関する追加情報については、このリンクにアクセスしてください。

于 2013-03-21T01:31:49.297 に答える
1

あなたはあなたがするfreeすべてのものを持っていますmalloc。関数が戻ると、変数Aはスコープ外になりますが、メモリは割り当てられたままになります。(他の場所に保存されていない限り)メモリへのポインタを失ったため、メモリリークが発生しています。

が指すメモリがまだ必要な場合はA、割り当てられた構造体へのポインタを返し、後で解放することができます。関数が戻った後で割り当てられたメモリが必要ない場合は、。を使用してメモリを解放しますfree(A)

于 2013-03-21T01:31:57.827 に答える