gpt4 book ai didi

c - 将值分配给在结构中启动的二维数组会导致无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:24 26 4
gpt4 key购买 nike

typedef struct game_t {
char gameBoard[ROWS][COLUMNS];
} Game;


Game* Create(){
Game *thegame = (Game *)malloc(sizeof(Game*));
if (thegame==NULL || historySize<=0){
return NULL;
}
int row=0, col=0;
for (row = 0; row<ROWS; row++){
for (col = 0; col<COLUMNS; col++){
thegame->gameBoard[row][col] = EMPTY_ENTRY;
}
}
return thegame;
}

我正在尝试运行上面的代码并将值分配给在结构中初始化的二维数组(大写字母都是#define 值)。出于某种原因,我一直在 Eclipse 中进入无限循环。当我构建项目时,没有标志出现,只是在我运行它时。谁能向我解释我做错了什么?

谢谢!

最佳答案

声明 Game *thegame = (Game *)malloc(sizeof(Game*)) 肯定是错误的;连同 thegame->gameBoard[row][col] = EMPTY_ENTRY,当您访问未分配的内存时,它会引入未定义的行为。所以你应该改写 Game *thegame = malloc(sizeof(Game))。请注意,在 C 中,最好不要按照here 的说法转换malloc 的结果。 .

无论如何,如果 EMPTY_ENTRY 被定义为值 0,您也可以使用 calloc,它用 0< 初始化内存。所以你可以省略你的 for -loops then (cf. cppreference/calloc ):

void* calloc( size_t num, size_t size ); Allocates memory for an array of num objects of size size and initializes all bytes in the allocated storage to zero.

关于c - 将值分配给在结构中启动的二维数组会导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44467161/

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