Witam serdecznie!
Uczę się języka C i trochę zamotałem się w dynamicznej alokacji kilku rzeczy naraz.
Mój program ma mieć następującą budowę:
struktura mapy gry -> dwuwymiarowa tablica struktur komórek gry -> dwa pola ze stanem aktualnym i poprzednim.
Przy samym alokowaniu, wprowadzaniu danych czy ich wyświetlaniu nie pojawiają się problemy [EDIT: a jednak są przy odpowiednio dużych wymiarach np. 33x33],
natomiast próba zwolnienia pamięci sypie cały program, gdyż z całej funkcji destroyWorld() poprawnie wykonuje się jedynie free(world).
Będę bardzo wdzięczny za wskazówki, co robię źle, bo już nie mam pomysłu i chyba tylko sen może mi coś jeszcze podsunąć. ;)
Z góry dziękuję za odpowiedź i pozdrawiam!
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char prev;
char curr;
} Cell;
typedef struct {
int rows;
int cols;
Cell **cells;
} World;
World *initWorld(int h, int w)
{
int i = 0;
World *world = NULL;
if( ( world = (World *) malloc(sizeof(World)) ) == NULL )
return NULL;
world->rows = h;
world->cols = w;
if( ( world->cells = (Cell **) malloc(sizeof(Cell)*h) ) == NULL )
return NULL;
for(; i < h; i++)
if( ( world->cells[i] = (Cell *) malloc(sizeof(Cell)*w) ) == NULL )
return NULL;
return world;
}
void displayWorld(World *world)
{
int i = 0, j = 0, h, w;
h = world->rows;
w = world->cols;
for(i = 0; i < h; i++)
{
for(j = 0; j < w; j++)
printf("%d ", world->cells[i][j].curr);
printf("\n");
}
}
void destroyWorld(World *world)
{
int i = 0, h, w;
h = world->rows;
w = world->cols;
for(; i < h; i++)
free(world->cells[i]);
free(world->cells);
free(world);
}
int main()
{
int height = 0, width = 0;
World *world = NULL;
printf("Podaj wysokosc: ");
scanf("%d", &height);
printf("Podaj szerokosc: ");
scanf("%d", &width);
world = initWorld(height, width);
displayWorld(world);
destroyWorld(world);
printf("\n\n");
system("PAUSE");
return 0;
}