You defined board
as a local variable – its memory is dealoccated as the function goes out of scope.
You can declare the board global, or you can create it dynamically like so:
int **allocate_board(int Rows, int Cols)
{
// allocate Rows rows, each row is a pointer to int
int **board = (int **)malloc(Rows * sizeof(int *));
int row;
// for each row allocate Cols ints
for (row = 0; row < Rows; row++) {
board[row] = (int *)malloc(Cols * sizeof(int));
}
return board;
}
You will need to dynamically free the board:
// you must supply the number of rows
void free_board(int **board, int Rows)
{
int row;
// first free each row
for (row = 0; row < Rows; row++) {
free(board[row]);
}
// Eventually free the memory of the pointers to the rows
free(board);
}