【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18929

malloc,freeを関数宣言
投稿者---ほぼ初心者(2004/12/31 04:44:27)


mallocやcallocを用いて3次元の領域を確保したのですが、
プログラムが長くなるために、関数宣言をしたいと思っています。
以下にそのプログラムを示します。
#include<stdio.h>
#include<malloc.h>
int main(){
    int i,j,k,x,y,z;
    double  ***q;
    
    /*配列の形を宣言をする。*/
    x=2;
    y=3;
    z=4;


    /*3次元配列*/
    q=(double***)malloc(sizeof(double**)*x);
        for(i=0;i<x;i++){
            q[i]=(double**)malloc(sizeof(double*)*y);
            for(j=0;j<y;j++){
                q[i][j]=(double*)malloc(sizeof(double)*z);
            }
        }
        /*配列に数値代入*/
    for(i=0;i<x;i++)
        for(j=0;j<y;j++){
            for(k=0;k<z;k++){
            printf("数値を代入してください。q[%d][%d][%d]=",i,j,k);
            scanf("%d",&q[i][j][k]);
            }
        }

    /*結果表示*/
    for(i=0;i<x;i++)
        for(j=0;j<y;j++){
            for(k=0;k<z;k++){
                printf("数値はq[%d][%d][%d]=%d\n",i,j,k,q[i][j][k]);
            }
        }


    /*メモリを解放*/
    for(i=0;i<x;i++){
        for(j=0;j<y;j++){
            free(q[i][j]);
        }
        free(q[i]);
    }
    free(q);
}

このプログラムを以下のように書きたいのですが、分かりません。どうかご教授願いたいと思っています。
#include <stdio.h>
#include <stdlib.h>

main(){
    double ***C;
    fMalloc3D(C,.,.);

    //数値代入と表示

    fFree3D(C,.,.);
}

double*** fMalloc1D(C,.,.){
    ...
}

void fFree3D(C,.,.){
    ...
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:malloc,freeを関数宣言 18930 monkey 2004/12/31 09:08:51


No.18930

Re:malloc,freeを関数宣言
投稿者---monkey(2004/12/31 09:08:51)


// 例:
#include<stdlib.h>
#include<stdio.h>

double*** fMalloc3D( int x, int y, int z );
void fFree3D( double*** q, int x, int y );

int main( void )
{
    int i,j,k,x,y,z;
    double*** q;

    /*配列の形を宣言をする。*/
    x=2;
    y=3;
    z=4;

    /*3次元配列*/
    q = fMalloc3D( x, y, z );

    /*配列に数値代入*/
    for(i=0;i<x;i++){
        for(j=0;j<y;j++){
            for(k=0;k<z;k++){
                printf("数値を代入してください。q[%d][%d][%d]=",i,j,k);
                scanf("%d",&q[i][j][k]);
             }
        }
    }

    /*結果表示*/
    for(i=0;i<x;i++){
        for(j=0;j<y;j++){
            for(k=0;k<z;k++){
                printf("数値はq[%d][%d][%d]=%d\n",i,j,k,q[i][j][k]);
            }
        }
    }

    /*メモリを解放*/
    fFree3D( q, x, y );

    return 0;
}

double*** fMalloc3D( int x, int y, int z )
{
    int i, j;
    double*** q = (double***)malloc( sizeof(double**) * x );
    for( i = 0; i < x; i++ ){
        q[i] = (double**)malloc( sizeof(double*) * y );
        for( j = 0; j < y; j++ ){
            q[i][j] = (double*)malloc( sizeof(double) * z );
        }
    }
    return q;
}

void fFree3D( double*** q, int x, int y )
{
    int i, j;
    for( i = 0; i < x; i++ ){
        for( j = 0; j < y; j++ ){
            free( q[i][j] );
        }
        free( q[i] );
    }
    free( q );
}



この投稿にコメントする

削除パスワード

No.18932

Re:malloc,freeを関数宣言
投稿者---ほぼ初心者(2004/12/31 15:26:30)


大変参考になりました。ありがとうございました。関数宣言がいまいち理解できなかったのですが、完全に理解できたように思えます!


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧