【问题标题】:How do I initialise values of a struct object when dynamically allocating a multidimensional array?动态分配多维数组时如何初始化结构对象的值?
【发布时间】:2016-12-06 01:56:48
【问题描述】:

我一直试图找出问题所在,但我看不到它。
这是一个扫雷网格,我正在尝试为 struct Cell 类型的对象的指针的二维数组分配内存,并设置其值。
当我使用这个函数时,我得到一个单元格网格,我可以从中查询它们的值,但这些都是 NULL。
我知道错误就在这里,因为我使用了一个为我进行此分配的库,并且我的代码可以使用它。我现在必须自己写分配。

struct Cell*** allocate_grid(int grid_width, int grid_height) {
    struct Cell*** grid = malloc(grid_width * sizeof(*grid));
    int column;
    for (column = 0; column < grid_width; column++) {
        grid[column] = malloc(grid_height * sizeof(**grid));
        int row;
        for (row = 0; row < grid_height; row++) {
            struct Cell cell = {COVERED, 0, false}; //state, neighbouring mines, is_mine
            grid[column][row] = &cell;
      }
    }
    return grid;
}

【问题讨论】:

    标签: c multidimensional-array struct


    【解决方案1】:

    我必须使用 malloc 手动为单元本身分配内存。

    struct Cell* alloc_cell(enum State state, int neighbouring_mines, bool is_mine) {
        struct Cell* cell = malloc(sizeof(cell));
        cell->state = state;
        cell->neighbouring_mines = neighbouring_mines;
        cell->is_mine = is_mine;
        return cell;
    }
    
    struct Cell*** allocate_grid(int grid_width, int grid_height) {
        struct Cell*** grid = malloc(grid_width * sizeof(*grid));
        int column;
        for (column = 0; column < grid_width; column++) {
            grid[column] = malloc(grid_height * sizeof(**grid));
            int row;
            for (row = 0; row < grid_height; row++) {
                grid[column][row] = alloc_cell(COVERED, 0, false);
          }
        }
        return grid;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-04
      • 2021-07-16
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多