0

私はほとんど違いについて頭を悩ませていると思いますが、私が正しければ、これも正しいはずです:

1.)

char *string1 = (char*) malloc(runtime_determined_number);

2.)

char string2val[runtime_determined_number];
char *string2 = &string2val;

ここで、string1 と string2 が同じであることを期待しますが、そうですか?

4

4 に答える 4

1

string1string2同じメモリ領域を指していない

string1charで動的に割り当てられた配列を指すポインタですmalloc

string2char静的に割り当てられた配列を指すポインタです

于 2013-04-08T13:42:36.380 に答える
0

それらは同じタイプを持ち、少なくともruntime_determined_numberバイトが割り当てられているという点で似ています。

それらは次の点で異なります。

  1. 最初のバージョンではfree()、メモリ リークを回避するために明示的に指定する必要があります。
  2. 2 つのオブジェクトの有効期間は、同じである場合と異なる場合があります。

2 番目のバージョンは可変長配列を使用するため、C99でのみ有効であることに注意してください。

于 2013-04-08T13:42:09.363 に答える
0

どちらも、同じ長さの初期化されていないメモリ ブロックを指しています。その点では同じです、はい。

freeケース 1 の場合、作業が終了したらメモリを ing する責任があることに注意してください。ケース 2 では、終了時にメモリがスコープ外になるため、関数からポインターを安全に返すことはできません。

于 2013-04-08T13:41:20.097 に答える
0

使用mallocすると、実行時に OS にメモリが要求されます。malloc成功した場合は、割り当てられたメモリで作業できます。後でこのメモリの割り当てを解除する必要があります。
2 番目の部分では、char-array を作成し、そのアドレスをポインターに割り当てます。この場合、メモリは から取得され、配列が範囲外にstackなるとfree自動的に削除されます。
あなたchar*の s は、メモリ内の異なる場所を指しているため、同じではありません。初期化していないため、同じゴミが含まれている可能性はほとんどありません...

于 2013-04-08T13:42:54.790 に答える