#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 capacite; 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->capacite); } void init_zeros(jeton* ptr, int count) { for (int i=0; ijetons = malloc(capacite*sizeof(jeton)); init_zeros(col->jetons, capacite); col->capacite = capacite; col->hauteur = 0; return col; } bool agrandir_colonne(int diff_taille, colonne *col) { printf("J'appelle realloc(%p, %d + %d)\n", col->jetons, col->capacite, diff_taille); jeton *jetons_nouv = realloc(col->jetons, col->capacite + diff_taille); if (jetons_nouv == NULL) return false; // allocation impossible, on garde col->jetons tel quel col->jetons = jetons_nouv; // on met des zéros dans la partie nouvellement attribuée init_zeros(col->jetons + col->capacite, diff_taille); printf("vérif travail init_zeros\n"); print_tab(col->jetons, col->capacite + diff_taille); // free est appelé par realloc et les éléments sont copiés par realloc col->capacite += diff_taille; return true; } bool ajouter_jeton(jeton j, colonne *col) { printf("%d", col->hauteur); if (col->hauteur >= col->capacite) { 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; }