Sun Studio 12: Fortran ライブラリ・リファレンス

1.4.35.2 記憶領域の再割り当て: realloc

realloc() f95 組み込み関数は、次のように呼び出します。

k = realloc(ptr, n )

ptr

INTEGER

入力 

既存の記憶領域へのポインタ (前述の malloc() または realloc() 呼び出しからの戻り値)。

n

INTEGER

入力 

必要とされるブロックの新しいサイズ。 バイト単位。 

戻り値 

INTEGER

(Cray POINTER)

出力 

k>0: k は割り当てられた新しい記憶領域の開始アドレス

k=0: エラー

 

-m64 を使って、64 ビット環境用にコンパイルした場合は、INTEGER*8 ポインタ値が戻る。次に示す注を参照。

realloc() 関数は ptr によって指定される記憶領域のサイズを n バイトに変更し、ポインタを (移動された可能性のある) 新しいブロックに戻します。記憶領域の中身は新規および古いサイズの最小までには変更されません。

ptr が 0 の場合、realloc()malloc() と同じ処理を行い、新しく n バイトの記憶領域サイズを割り当てます。

n が 0 で ptr が 0 以外の場合、指定された記憶領域のブロックは将来の割り当てに対して有効にされ、アプリケーションが終了した場合のみ、システムに戻されます。

例: malloc()realloc()、および Cray-style POINTER 変数を使用した例を示します。


       PARAMETER (nsize=100001)
       POINTER (p2space,space)
       REAL*4 space(1)

       p2space = malloc(4*nsize)
       if(p2space .eq. 0) STOP 'malloc: 割り当てできません'
       ...
       p2space = realloc(p2space, 9*4*nsize)
       if(p2space .eq. 0) STOP 'realloc: 再割り当てできません'
       ...
       CALL free(p2space)
       ...

realloc()f95 のみに実装されています。