1

C の構造体で変数行列を初期化する際に問題があります。いくつかの投稿 ( post )を読んでいますが、修正できないようです。理由は聞かないでください。割り当てのために、構造体にある行列を初期化する必要があります。

構造体の私のコードは次のとおりです。

typedef struct maze{
    int row;
    int column;
    char matrix[row][column];
}maze;

別の関数を呼び出すことにより、特定のファイルを読み取った後、指定されたパラメーターで行列を初期化する必要があるため、2 つのパラメーター「行」と「列」です。

init 関数の私のコードは次のとおりです。

struct maze* init_maze(int row, int column) {

    struct maze mazeFilled;
    struct maze *mazePointer;

    mazeFilled.row = row;
    mazeFilled.column = column;

    return mazePointer;
}

しかし、これが機能していないと推測できるように、2 つの変数から行列を作成するのは難しいと人々は既に述べています。誰かが私が間違っていることを説明できますか?

編集1:

構造体の投稿に従ってコードを変更しましたが、同じままです。ポインターを割り当てて、スクープの外でもアクティブなままにする必要がありました。

init 関数の新しいコードは次のとおりです。

struct maze* init_maze(void) {

    int row = 6;
    int column = 10;
    struct maze *mazePointer = malloc(sizeof (*mazePointer));

    mazePointer->row = row;
    mazePointer->column = column;

    return mazePointer;
}   

編集2:

エラーが何であるかを発見したと思います。マトリックスにメモリを割り当てませんでした。私の新しいinit関数:

struct maze* init_maze(void) {

int row = 6;
int column = 10;

maze *mazePointer;
mazePointer = malloc(sizeof(maze));
mazePointer->row = row;
mazePointer->column = column;
mazePointer->matrix =  malloc(row * sizeof(char*));

for (int i; i < row; i++) {
    for(int j; j < column; j++) {
    mazePointer -> matrix[i][j] = malloc(1 * sizeof(char*));
    }
}

return mazePointer;

}

最初の配列 [i] だけにメモリを割り当てる方法がまだわかりません。私が正しい方向に進んでいるかどうか、誰かに教えてもらえますか?

4

1 に答える 1