#include // à enlever après #include #include #define Y_BLOCK_SIZE 10 typedef enum jeton { VIDE = 0, BLEU = 1, ROUGE = 2 } jeton; typedef struct colonne { int hauteur; int hauteur_max; jeton* jetons; } colonne; void print_tab(jeton *tab, int n) { for (int i=0; i %x (%d)\n", &tab[i], tab[i], tab[i]); printf("\n"); } void print_colonne(colonne *col) { print_tab(col->jetons, col->hauteur_max); } void init_zeros(jeton* ptr, int count) { for (int i=0; ijetons = malloc(hauteur_max*sizeof(jeton)); init_zeros(col->jetons, hauteur_max); col->hauteur_max = hauteur_max; col->hauteur = 0; return col; } bool agrandir_colonne(int diff_taille, colonne *col) { printf("J'appelle realloc.\n"); jeton* jetons_nouv = realloc(col->jetons, col->hauteur_max + diff_taille); if (jetons_nouv == NULL) return false; // allocation impossible, on garde col->jetons tel quel // on met des zéros dans la partie nouvellement attribuée init_zeros(jetons_nouv + col->hauteur_max, diff_taille); printf("vérif travail init_zeros\n"); print_tab(jetons_nouv, col->hauteur_max + diff_taille); // free est appelé par realloc et les éléments sont copiés par realloc col->hauteur_max += diff_taille; col->jetons = jetons_nouv; //print_colonne(col); return true; } bool ajouter_jeton(jeton j, colonne *col) { printf("%d", col->hauteur); if (col->hauteur >= col->hauteur_max) { if (!agrandir_colonne(Y_BLOCK_SIZE, col)) return false; } col->jetons[col->hauteur] = j; col->hauteur++; return true; } void detruire_colonne(colonne *col) { free(col->jetons); free(col); } typedef struct grille { int n_positifs; colonne* positifs; int n_negatifs; colonne* negatifs; } grille; // =========================================== TEST ================================================= int main() { colonne *col = creer_colonne(Y_BLOCK_SIZE); print_colonne(col); for (int i=0; i<15; i++) { if (ajouter_jeton((i%2==0) ? ROUGE : BLEU, col)) printf("Jeton ajouté.\n"); else fprintf(stderr, "Erreur dans l'ajout d'un jeton.\n"); } print_colonne(col); detruire_colonne(col); return 0; }