-1
ポインタ変数がCで宣言されているときに割り当てられるメモリとmallocを使って割り当てられるメモリの主な違いは何ですか?Cでの動的メモリ割り当て
ポインタ変数がCで宣言されているときに割り当てられるメモリとmallocを使って割り当てられるメモリの主な違いは何ですか?Cでの動的メモリ割り当て
オブジェクトへのポインタを返すことをお勧めします。
foo *newFoo1(void)
{
foo *ptr = malloc(sizeof (struct foo));
ptr -> bar = 42;
return ptr;
}
newFoo1()
がヒープへのメモリのブロックを割り当て:新しいfoo
オブジェクトを作成するために、malloc()
を使用し
struct foo
{
int bar;
}
:たとえば
は、我々は構造体がfoo
と呼ばれる持っていると言いますptr
と入力し、すべての初期化が行われます。最後にptr
が返されます。 newFoo()
が返された後、*ptr
の寿命はオーバーライドされないヒープ上に存在するため、終了しません。
そうでない場合、あなたは、単にローカル変数へのポインタを返すことがあります。この場合
foo *newFoo2(void)
{
foo aFoo;
aFoo.bar = 42;
return &aFoo;
}
、aFoo
はスタック上に存在します。 newFoo2()
が返された場合、aFoo
の有効期間は直ちに終了します。対応するメモリはすぐに上書きすることはできませんが、すべての情報aFoo
は、1つ以上の関数が呼び出された後に最終的に失われます。
生涯。自動オブジェクトの存続期間は、宣言されたブロックが終了すると終了します。割り当てられたオブジェクトの有効期間は、割り当てが解除される(またはプログラムが終了する)ときに終了します。 – EOF
@EOFまた、ロダータなどのためにローダーによって割り当てられたスペースもあります。 –
... Immaがこれを「あまりにも広すぎる」と閉鎖している理由です。 –