I am trying to allocate a 2D array
in a function
, but when I use this function my whole SDL apps crashes. If I comment out just the line where I call the function, there is no problem.
The return I get: Process returned -1073741819 (0xC0000005)
My Structs:
typedef struct Game
{
int x;
int y;
GameMode mode;
Field field;
} Game;
typedef struct Cell
{
CellType type;
bool shown;
bool marked;
} Cell;
This is how I initialize the Game
and set a pointer of pointer for Cell
.
Game game;
Cell **cells;
setup_ui(&game, cells);
setup_ui
function: static int setup_ui(Game *game, Cell **cells)
In the setup_ui
I have the function which causes the problem:
cells = setup_cells(game, cells);
And the function itself:
Cell** setup_cells(Game *game, Cell** cells){
cells = (Cell**) malloc(game->y*sizeof(Cell*));
for(int x=0; x<game->y; x++){
cells[x] = (Cell*) malloc(x * sizeof(Cell));
}
for(int i=0; i<game->x; i++){
for(int j=0; j<game->y; j++){
cells[i][j].type = simple;
cells[i][j].shown = false;
cells[i][j].marked = false;
}
}
return cells;
}
First of all, there's a mistake here:
for(int x=0; x<game->y; x++){
cells[x] = (Cell*) malloc(x * sizeof(Cell));
}
This should be malloc(game->x * sizeof(Cell))
, since x
is the current index, but game->x
is the actual width. However, the error comes from the fact that here:
for(int i=0; i<game->x; i++){
for(int j=0; j<game->y; j++){
cells[i][j].type = simple;
cells[i][j].shown = false;
cells[i][j].marked = false;
}
}
i
can go up to game->x
, and j
can go up to game->y
, but the first dimension is of size game->y
and the second dimension is of size game->x
. So, you should flip the bounds of i
and j
.
User contributions licensed under CC BY-SA 3.0