尝试创建一个2D列表,但行的第一个元素将最后一行的最后一个元素更改为所述元素

时间:2016-08-16 14:59:02

标签: c multidimensional-array

这是我的代码的一部分:

int h = height+1;
int w = width+1;
char board[h][w];    
board[0][w] = 'a';
board[1][0] = '|';

printf("%c, %c", board[0][w], board[1][0]);

但是当我编译并运行它时,我得到了这个:

|, |

我做错了什么?

2 个答案:

答案 0 :(得分:2)

应该是:

board[0][w-1] = 'a';
board[1][0] = '|';

或者,

board[0][width] = 'a';
board[1][0] = '|';

答案 1 :(得分:2)

您通过访问超出范围的数组来调用未定义的行为。分配足够的元素或使用正确的索引。

前例:

int h = height+1;
int w = width+1;
char board[h][w+1]; /* allocate w+1 elements instead of w */
board[0][w] = 'a';
board[1][0] = '|';

printf("%c, %c", board[0][w], board[1][0]);

后一个例子:

int h = height+1;
int w = width+1;
char board[h][w];    
board[0][w-1] = 'a'; /* use w-1 instead of w */
board[1][0] = '|';

printf("%c, %c", board[0][w-1], board[1][0]); /* use w-1 instead of w */