malloc() 関数は、次のように呼び出します。
k = malloc( n ) |
|||
n |
INTEGER |
入力 |
記憶領域のバイト数 |
戻り値 |
INTEGER(Cray POINTER) |
出力 |
k>0: k は割り当てられた記憶領域の開始アドレス k=0: エラー |
-m64 を使って、64 ビット環境用にコンパイルした場合は、INTEGER*8 ポインタ値が戻る。次に示す注を参照。 |
この関数は、Fortran 95 では組み込み関数ですが、FORTRAN 77 では外部関数でした。64 ビット環境で動作するようにコンパイルされたプログラムでは、malloc() 関数とその出力を受け取る変数を INTEGER*8 と宣言する必要があります。関数 malloc64(3F) は、プログラムを 32 ビット環境と 64 ビット環境間で可搬性を持たせるために提供された関数です。
k = malloc64( n ) |
|||
n |
INTEGER*8 |
入力 |
記憶領域のバイト数 |
戻り値 |
INTEGER*8 (Cray POINTER) |
出力 |
k>0: k は割り当てられた記憶領域の開始アドレス k=0: エラー |
これらの関数は、記憶領域を割り当て、その領域の開始アドレスを返します。64 ビット環境では、この返されたバイトアドレスは、INTEGER*4 の数値範囲外になる可能性があります。 受け取り側の変数では INTEGER*8 と宣言し、メモリーアドレスが切り捨てられないようにする必要があります。この記憶領域は、初期化できません。 そのため記憶領域が、ある値、特にゼロに事前設定されていることを前提としないでください。
例: malloc() を使用したコード部分
parameter (NX=1000) integer ( p2X, X ) real*4 X(1) … p2X = malloc( NX*4 ) if ( p2X .eq. 0 ) stop 'malloc: 割り当て不可' do 11 i=1,NX 11 X(i) = 0. … end |
前述の例では、 p2X で指定される 4,000 バイトのメモリーを獲得し、この領域を 0 に初期化しています。