0

この関数は、メモリブロックを新しい場所に移動する場合があります。その場合、新しい場所が返されます。
たとえば、配列へのポインタがあります。

int *arr; // somewhere next it initialized, filled with elements and etc

どこかで私がする必要があります:

void* location = realloc(arr, NEW_SIZE);

古いメモリブロックプレイスはどうなりますか?

reallocが数学ではないポインタをarrに返す場合、次のコードを使用する必要がありますか?:

delete arr;
arr = (int*)location;
4

3 に答える 3

7

この関数reallocは古き良きCから継承されています。デストラクタを実行したり、その他のC++マジックを実行したりすることはありません。mallocまた、 (およびフレンド)を使用して割り当てられたブロックにのみ適用できます。 「new」を使用して割り当てられたブロックには使用できません

于 2012-05-18T08:03:36.943 に答える
4

ルール1:new/deleteとmalloc/freeを混在させないでください。

malloc()そもそも割り当てを行っていて、より大きなヒープスペースが必要な場合は、呼び出す必要がありrealloc()ます。これにより、同じメモリ領域にマップされない可能性がある新しいポインタが返されるarrため、使用しないでください。

無料のmalloc'ed/realloc'ed space withfree

于 2012-05-18T08:06:08.250 に答える
3

realloc(void * ptr、size_t new_size)は、 malloc()、calloc()、またはrealloc()によって以前に割り当てられ、free()でまだ解放されていない、指定されたメモリ領域を必要とptrします。そうでない場合、結果は未定義です。

reallocは、 malloccalloc、または別のreallocでのみ使用し、無料でクリーンアップしてください。
C ++では、常にnewdeleteで使用し、new[]delete[]で使用します。

于 2012-05-18T08:09:20.013 に答える