и после того, как все эти памяти будут освобождены, вы освободите память, выделенную в

ой код, я получаю ошибку сегментации, и я не знаю почему ... Я создаю сетку, котораяn это его размер,tab это массив, типом которого является cellule: ячейка имеет 2 значения. Итак, я создаю в функцииcreer_grille массив яmalloc это (размер может быть 4 6 или 8), и я инициализирую значения ячеек с -1 и 0. Затем в следующей функции я тестируюcreer_grille функция.

typedef struct
{
    int val;
    int initial;
} cellule;

typedef struct
{
    cellule  *tab;
    int      n;
} grille;

grille  *creer_grille(int n)
{
    grille *g;
  int    i;

  assert(n == 4 || n == 6 || n == 8 && "Taille de la grille différent de 4,6 ou 8");
    g->n = n;
    g = malloc(sizeof(int) * (n*n));
        if (g->tab == NULL)
                exit(-1);
    for (i = 0; i < n*n; i++)
      {
        g->tab[i].val = -1;
        g->tab[i].initial = 0;
      }
      return g;
}

void detruire_grille(grille * g)
{
  free(g);
}

void test_creer_grille(){
    int i,k;
    for(k = 4; k <= 8 ; k+=2){
        grille * g = creer_grille(k);
        assert(g->n == k && "Problème dans le champ n de la grille");

        //Vérification que les cellules sont vides
        for(i = 0 ; i < k * k ; i++){
            assert(g->tab[i].val == -1 && "Problème : cellule non vide !");
            assert(g->tab[i].initial == 0 && "Problème : cellule initiale !");
        }
        detruire_grille(g);
    }
    printf("Test de la fonction creer_grille OK !\n");
}

int    main()
{
   test_creer_grille();
}

Ответы на вопрос(1)

Ваш ответ на вопрос