2017-11-04 17 views
-2

char str[10]char *str = (char *) malloc(10)の違いは何ですか?私が理解しているように、どちらもcharの配列に対して10バイトを割り当てるわけではありませんか?これら2つのメモリ割り当ての違いは何ですか?

+0

'char str [10]'が関数の外部で使用されている場合、それはグローバル変数です。メモリはコンパイラによって割り当てられ、(おそらく)バイナリの一部になります(初期化されると)。 'char str [10]'が関数内で使用されている場合、その関数が入力されるたびに(返されると解放される)_stack_に割り当てられます。 'char * str =(char *)malloc(10)'は_heap_のメモリを割り当てます。あなたはそれを解放する( 'free()'を使って)あなたは責任があります。それ以外の場合は、別のアドレスで 'str'を割り当て直すと、リークと呼ばれます(つまり、割り当てられたメモリはプログラムが終了するまで"失われます ")。 – Scheff

+2

Cブックでそれを見つけられなかった場合は、それを投げ捨てて良いものを購入してください... ;-) – Scheff

答えて

1
  1. char str[10];

グローバル(静的)スコープ - 初期化に応じて(.data又は.bssセグメントに割り当てられたプログラムの終了前に解放できません

ローカル(自動)スコープ。 - 通常(ほとんどの実装で、Cの標準ではスタックに割り当てられたものは無視されません)、プログラムがスコープを離れるときに自動的に解放されます

ヒープに割り当て

2.

char *str = malloc(10);

free関数を使用してプログラムから解放する必要があります

-1

char str[10]スタックにメモリを割り当てます。 char *str = (char *) malloc(10)ヒープにメモリを割り当てます。コンピュータのRAMに格納されているスタックとヒープ。 More information about stack and heap

+0

間違っています: 'スタックは静的メモリ割り当てに使用されています' –

関連する問題