gpt4 book ai didi

有条件的跳跃或移动取决于未初始化的值

转载 作者:太空狗 更新时间:2023-10-29 15:59:38 24 4
gpt4 key购买 nike

我已经为这个问题苦苦挣扎了一段时间,寻找所有可能的解决方案。我是 C 的新手,所以我并不难。我知道我有一些未初始化的变量,但我找不到它们。我正在尝试打印矩阵。这是构造函数:

BoardP createNewBoard(int width, int high)
{

BoardP board = (BoardP) malloc(sizeof(Board));

if (board == NULL)
{
reportError(MEM_OUT);
return NULL;
}
board->height = high;
board->width = width;
board->board = (char**) malloc(high * sizeof(char*));
int i;
for (i=0; i<high; i++)
{
board->board[i] = (char*) malloc(width * sizeof(char));
if (board->board[i] == NULL)
{
freeTempBoard(board,i);
return NULL;
}
}

return board;
}

构造函数返回BoardP,一个pinter给Board,即:

typedef struct Board
{
int width;
int height;
char **board;
} Board;

现在我尝试打印 board->board 失败了。我遍历矩阵并为每个单元格调用此函数:

static void printChar(ConstBoardP board, int X, int Y)
{
if (X>=board->height || Y>=board->width)
{
printf(" ");
}
else
{
printf("%c ",board->board[X][Y]); //!!THIS IS LINE 299 IN Board.c!!
}
}

最后是我得到的错误:

==4931== Conditional jump or move depends on uninitialised value(s)
==4931== at 0x4E973D9: _IO_file_overflow@@GLIBC_2.2.5 (fileops.c:880)
==4931== by 0x4E6F01B: vfprintf (vfprintf.c:1614)
==4931== by 0x4E75879: printf (printf.c:35)
==4931== by 0x400D91: printChar (Board.c:299)
==4931== by 0x400CED: printBoard (Board.c:284)
==4931== by 0x400F1A: main (PlayBoard.c:19)
==4931==
==4931== Conditional jump or move depends on uninitialised value(s)
==4931== at 0x4E97401: _IO_file_overflow@@GLIBC_2.2.5 (fileops.c:887)
==4931== by 0x4E6F01B: vfprintf (vfprintf.c:1614)
==4931== by 0x4E75879: printf (printf.c:35)
==4931== by 0x400D91: printChar (Board.c:299)
==4931== by 0x400CED: printBoard (Board.c:284)
==4931== by 0x400F1A: main (PlayBoard.c:19)
==4931==
==4931== Conditional jump or move depends on uninitialised value(s)
==4931== at 0x4E6F025: vfprintf (vfprintf.c:1614)
==4931== by 0x4E75879: printf (printf.c:35)
==4931== by 0x400D91: printChar (Board.c:299)
==4931== by 0x400CED: printBoard (Board.c:284)
==4931== by 0x400F1A: main (PlayBoard.c:19)

现在有另一个文件调用createNewBoard,然后create printBoard(newBoard,0,0)。唯一可能未初始化的是 board->board,除此之外我没有其他想法。我不知道如何调试它。我知道它有很多文字,但我找不到问题所在。任何想法将不胜感激

最佳答案

尝试:

for (i=0; i<high; i++)
{
board->board[i] = (char*) malloc(width * sizeof(char));
/* ... */
memset(board[i], 0, width);
}

关于有条件的跳跃或移动取决于未初始化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089892/

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