无法在2D数组

时间:2017-03-06 02:02:17

标签: c arrays

我是malloc的新手。我哪里出错了?

#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
typedef enum {RED_WINS, YELLOW_WINS, TIE, STILL_PLAYING} gamestate;
typedef enum {EMPTY, RED_COIN, YELLOW_COIN} square;

typedef struct {
    int numRows, numCols;
    int coinsInBoard;
    gamestate state;
    square** squares;
} gameboard;

gameboard* gameboard_create(int numRows, int numCols);
void gameboard_print(const gameboard board);
void gameboard_initialize(gameboard* board);

这是我不知道自己比以往任何时候都做得更多的地方。

// allocates space for the gameboard and its squares
gameboard* gameboard_create(int numRows, int numCols) {

        gameboard* result = malloc(sizeof(gameboard));
        result->squares= malloc(sizeof(square*)*numRows);
        for(int i = 0; i<numRows; i++){
            result-> squares[i] = (square*)malloc(sizeof(square)*numCols);
        }
    for (int i =0; i< result->numRows; i++){
        for(int j= 0; j< result->numCols; j++){
            
            result->squares[i][j] = EMPTY;
        }
    }
        return result;
}

// prints the coins currently in the board
void gameboard_print(const gameboard board){
    for (int i = 0; i < board.numRows; i++) {
        for (int j = 0; j < board.numCols; j++) {
            printf("* ");
        }
        printf("\n");
        }
}

int main() {
    printf("test\n");
    gameboard* result = gameboard_create(5, 5);
    gameboard_print(*result);
    return 0;
}

我试图为2D阵列分配足够的内存,以便在任何尺寸的主板上播放连接4。

目前除了&#39; test&#39;正在打印

1 个答案:

答案 0 :(得分:0)

主要问题:

您忘记设置result->numRowsresult->numCols的值。因此,由于使用了尚未初始化的变量,未定义的行为会发生。

添加

result->numRows = numRows;
result->numCols = numCols;
在将gameboard_create设置为result->squares[i][j]的循环之前的任何位置的EMPTY中的

其它

  1. Don't cast the result of malloc (and family)。从

    中删除演员表
    result-> squares[i] = (square*)malloc(sizeof(square)*numCols);
    
  2. 养成free你分配的所有东西的习惯。但是,在您显示的小示例中,当程序结束时,内存会自动获得free d,但free内存使用它是一种很好的做法。