我需要创建一个在14x14板上玩Hex游戏的程序。 所以我用' - '(我们的空格模式)创建,分配和填充了电路板 当我尝试打印电路板的坐标时,我并不总是得到“ - ”而是一些随机字符 另外,如果我在“board [i] [j] =' - ';”行之后尝试在createBoard函数上printf array [i] [j]我打印tab [8] [0]后立即出现分段错误 造成这种情况的原因是什么?如何解决? 我的代码:
#include <stdio.h>
#include <stdlib.h>
char **createBoard()
{
/*Allocates a 14x14 matrix and fills it
*with '-' to create the board.*/
int i, j;
char **board;
board = malloc(14);
if (!board) exit(1);
for (i = 0; i < 14; i++){
board[i] = malloc(14);
if (!board[i]) exit (1);
for (j = 0; j < 14; j++)
board[i][j] = '-';
}
return board;
}
int main()
{
int i, j;
char **board = createBoard();
for (i = 0; i < 14; i++)
for (j = 0; j < 14; j++)
printf("tab[%d][%d]: %c\n",i, j, board[i][j]);
return 0;
}
答案 0 :(得分:2)
对于初学者来说,不清楚为什么你不想声明一个数组而不是动态分配多个一维数组。
至于代码那么这个内存分配
board = malloc(14);
无效。你必须写
board = malloc( 14 * sizeof( char * ));
此外,您应该在程序结束之前以相反的顺序释放所有已分配的内存。
考虑到使用命名常量而不是幻数总是更好。至少你可以写
#define N 14
在主
之前或
const int N = 14.
并在使用幻数14的地方使用变量N
。
顺便说一句,根据C标准函数main,没有参数应该声明为
int main( void )
答案 1 :(得分:0)
变量*board
是一个指针,但是你只为每个数组元素分配一个字节,它应该是
#define DIM 14
board = malloc(DIM * sizeof *board);
随后进行第二次分配
board[i] = malloc(DIM * sizeof **board);
这也允许(a)维度14仅在程序中的一个位置进行硬编码,以及(b)如果您稍后将该板的元素设置为不同的类型,则分配将继续存在,例如{ {1}},随着计划的发展。