首页 > 解决方案 > C 结构 TriplePointer 内存分配

问题描述

我有这两个结构:

typedef struct {
    unsigned int rows;
    unsigned int cols;
    Cell ***cells;
} Board;

typedef struct {
    unsigned int info;  
    unsigned char state;    
    unsigned int mines;
} Cell;

初始化板结构:

board = (Board*) malloc(sizeof(Board));
board->rows = 2;
board->cols = 2;
board->cells = NULL;

之后我调用这个函数:

int initCells(Board **board) {
    Cell **cells = (Cell**) malloc((*board)->rows * sizeof(Cell*));

    for (int i = 0; i < (*board)->rows; i++) {
        cells[i] = (Cell*) malloc((*board)->cols * sizeof(Cell));
    }
    (*board)->cells = &cells;

    (*board)->cells[0][0]->info = 7;
    (*board)->cells[0][1]->info = 7;
    (*board)->cells[1][0]->info = 7; // segmentation fault
    return 0;
}

为什么我会出现第三个分段错误,将内存分配给三重指针的正确方法是什么?

标签: cpointersstructure

解决方案


(*board)->cells = &cells;

这会将板单元指针设置为指向函数中的局部变量。当函数返回时,该指针不再有效。

看起来你的指针级别太多了。没有理由我可以看到第三级。

参数上的第二级也board只是使事情复杂化,但完全是多余的。


推荐阅读