AllocArray3D

概要

動的に 3 次元配列を確保します。

プロトタイプ

void *AllocArray3D(int size3, int size2, int size1, int size0);

戻り値

確保した 3 次元配列へのポインタが返ります。

パラメータ

size3

3 次元配列の左側の要素数

size2

3 次元配列の中央の要素数

size1

3 次元配列の右側の要素数

size0

配列の要素サイズ

解説

AllocArray3D 関数は、3 次元配列を動的に確保します。返されたポインタを使うと [size3][size2][size1] の多次元配列として使うことができます。size0 には、sizeof(float) などデータ型のサイズを指定します。確保した配列は FreeArray3D 関数で解放しなければなりません。この関数の等価コードを以下に示します。

等価コード

void *AllocArray3D(int size3, int size2, int size1, int size0){
    void ***adr3 = (void ***)malloc(size3*sizeof(void *));
    void **adr2 = (void **)malloc(size3*size2*sizeof(void *));
    void *adr1 = malloc(size3*size2*size1*size0);
    int i, j, width2 = size2*size1*size0, width1 = size1*size0;
    for(j = 0; j<size3; j++){
        void **tmp2 = adr3[j] = adr2+j*size2;
        void *tmp1 = (char *)adr1+j*width2;
        for(i = 0; i<size2; i++) tmp2[i] = (char *)tmp1+i*width1;
    }
    return adr3;
}

プログラム例

/*
 *  このプログラムは array3d に float 型
 *  3 次元配列を割り当て、0.0f で初期化します。
 */
void main(){
    int sx = 64, sy = 48, sz = 32, x, y, z;
    float ***array3d = (float ***)AllocArray3D(sz, sy, sx, sizeof(float));
    for(z = 0; z<sz; z++) for(y = 0; y<sy; y++)
        for(x = 0; x<sx; x++) array3d[z][y][x] = 0.0f;
    FreeArray2D(array2d);
}

参照

FreeArray3D

▲SecTop | ▲PageTop
Copyright (c) 1999-2006 インターネット停留所