0

Cの関数を使用して動的マトリックスを作成する必要があります。これを作成しました:

#include <stdio.h>
#include <malloc.h>
int r=3;
int c=3;
int i;
void matrix(int *** m)
{
    m=(int***)malloc(r*sizeof(int*));
    for(i=0; i<c;i++)
    {
       m[i]=(int**)malloc(c*sizeof(int));
    }
};
int main()
{
    int **mat;
    matrix(&mat);
    mat[0][0]=1;
    mat[0][1]=2;
    printf("%d %d", mat[0][0], mat[0][1]);
    system("pause");
}

しかし、問題があると言ってクラッシュします。どこ?:(

4

1 に答える 1

1

に渡す&matmatrix、 は***mm位置を保持しますmat。すなわちmat = *m。それを念頭に置いて、次の方法で malloc を変更する必要があります。

void matrix(int *** m)
{
    //m=(int***)malloc(r*sizeof(int*));
    *m = (int **)malloc(r*sizeof(int*));
    for(i=0; i<c;i++)
    {
       //m[i]=(int**)malloc(c*sizeof(int));
       (*m)[i]=(int*)malloc(c*sizeof(int)); // it was *m[i]=..
    }
}

EDITは間違いを修正しました

編集ジョナサンがコメントで述べたように、この機能を実装するより良い方法は次のとおりです。

int **matrix(int rows, int cols)
{
    int i, j;
    int **mat = (int **)malloc(rows * sizeof(int *));
    for (i = 0; i < rows; i++) {
       mat[i] = (int *)malloc(cols * sizeof(int));
       // If you prefer to initialize values, uncomment the following line
       // for(j = 0; j < cols; j++) mat[i][j] = 0;
    }
    return mat;
}
于 2013-01-06T22:53:08.553 に答える