gpt4 book ai didi

c - 尝试访问 C 中二维数组的地址并出现段错误

转载 作者:行者123 更新时间:2023-11-30 14:59:55 25 4
gpt4 key购买 nike

我是 C 初学者,我对指针以及它们如何传递给其他函数有点困惑。我正在开发一个项目,在我的主函数中,我分配了代表游戏板的二维字符数组。

// In main, allocate 2D array   
char **board = malloc(rows * sizeof(char*));
for (int i = 0; i < rows; i++) {
board[i] = malloc(cols * sizeof(char));
}

稍后可以调用一个函数,该函数将加载游戏的保存版本,从而重新分配我的棋盘变量。

void stringToGame(char ***board, int *rows, int *cols, int *turn, int *winLength) {
// Set new values for rows and cols based on file
...

// Malloc board
*board = malloc(*rows * sizeof(char*));
for (int i = 0; i < *rows; i++) {
*board[i] = malloc(*cols * sizeof(char));
}

}

当我在主函数中调用 stringToGame 方法时,我传递了棋盘的地址。

stringToGame(&board, &rows, &cols, &turn, &winLength);

传递主板地址会导致段错误,我不知道为什么。

作为第二个问题,在分配新数组之前,我是否需要 free() 板的旧二维数组?

最佳答案

这个

*board[i] = malloc(*cols * sizeof(char));

应该是

(*board)[i] = malloc(*cols * sizeof(char));

因为数组下标运算符[]的优先级高于间接运算符*,因此将首先执行,但您需要发生相反的情况,即首先*,然后是[i]

关于c - 尝试访问 C 中二维数组的地址并出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42405198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com