1

10 要素の整数配列を作成するための 2 つのコード サンプルがあるとします。

 int *pi = (int*) 0x000; //base ADDRESS of OS
    realloc(pi,10);

もう 1 つは、通常どおりに記述されたものです。つまり、次のようになります。

int *pi;
pi=(int*) malloc(10*sizeof(int));

さて、私の質問は次のとおりです。最初のタイプの割り当ては合法ですが、使用されていません。なんで?そして、それらの違いは何ですか?

4

4 に答える 4

5

注: 同等の呼び出しはrealloc(pi, 10 * sizeof(int))

realloc doc は、特定のケースでは、呼び出しが malloc と同じであることを説明しています。

ptr が NULL の場合、realloc() は size バイトの malloc() の呼び出しと同じです。

于 2013-10-17T07:10:27.393 に答える
3

realloc割り当てられたメモリセグメントを拡張、縮小、または変更しない場合があります。実装によっては、新しいブロックを割り当てて古いコンテンツ (おそらく部分的) をコピーして古いコンテンツを削除するよりも効率的な場合があります。

それ以外は、reallocオーバー ヌル ポインターは とまったく同じ結果とパフォーマンスを持つ必要がありますmalloc

于 2013-10-17T07:10:35.943 に答える