void detruire_liste_et_truc(Un_elem *liste){ Un_elem *tmp; tmp=liste; while(liste){ detruire_truc(liste->truc); liste=liste->suiv; } liste=tmp; detruire_liste(liste); }
int main(int argc, char* argv[]){ char reponse; int allocation, desallocation, compactage; /* Autres déclarations */ /* Récupération des arguments de la ligne de commande */ if(argc == 2){ if(strcmp(argv[1], "-c") == 0) compactage = 1; else fprintf(stderr, "Erreur, paramètre %s inconnu \n", argv[1]); } else compactage = 0; /* Initialisations */ liste ll_ff = NULL; liste lo_ff = NULL; initialiser_ff(&ll_ff, &lo_ff); liste ll_nf = NULL; liste lo_nf = NULL; initialiser_nf(&ll_nf, &lo_nf); liste ll_bf = NULL; liste lo_bf = NULL; initialiser_bf(&ll_bf, &lo_bf); srand(time(NULL)); /* Boucle */ do { /* Détermination d'une suite aléatoire d'allocations/désallocations de mémoire */ allocation = choisi_allocation(); desallocation = choisi_desallocation(lo_ff); /* Simulation et affichage avec First Fit */ printf("\n\n\n############# Firstfit ########### \n\n"); if(allouer_ff(allocation, &ll_ff, &lo_ff, compactage) == 1){ printf("\n\nAllocation firstfit de %dMo bien effectuée. \n\n", allocation); } else{ fprintf(stderr, "\n\nErreur, impossible d'allouer %dMo en firstfit. \n\n", allocation); } //afficher_ff(ll_ff, lo_ff); if(desallocation != 0){ if(supprime_occupe_ff(desallocation, &lo_ff, &ll_ff) == 1){ printf("\n\nDésallocation firstfit de la taille %d bien effectuée. \n\n", desallocation); } else{ fprintf(stderr, "\n\nErreur, impossible de désallouer la taille %d.\n\n", desallocation); } //afficher_ff(ll_ff, lo_ff); } else{ printf("\n\nPas de désallocation pour ce tour ! \n\n"); } /* Simulation et affichage avec Next Fit */ printf("\n\n\n############# Nextfit ########### \n\n"); if(allouer_nf(allocation, &ll_nf, &lo_nf, compactage) == 1){ printf("\n\nAllocation nextfit de %dMo bien effectuée. \n\n", allocation); } else{ fprintf(stderr, "\n\nErreur, impossible d'allouer %dMo en nextfit. \n\n", allocation); } //afficher_nf(ll_nf, lo_nf); if(desallocation != 0){ if(supprime_occupe_nf(desallocation, &lo_nf, &ll_nf) == 1){ printf("\n\nDésallocation nextfit de la taille %d bien effectuée. \n\n", desallocation); } else{ fprintf(stderr, "\n\nErreur, impossible de désallouer la taille %d en nextfit.\n\n", desallocation); } //afficher_nf(ll_nf, lo_nf); } else{ printf("\n\nPas de désallocation pour ce tour ! \n\n"); } /* Simulation et affichage avec Best Fit */ printf("\n\n\n############# Bestfit ########### \n\n"); if(allouer_bf(allocation, &ll_bf, &lo_bf, compactage) == 1){ printf("\n\nAllocation bestfit de %dMo bien effectuée. \n\n", allocation); } else{ fprintf(stderr, "\n\nErreur, impossible d'allouer %dMo en bestfit. \n\n", allocation); } afficher_bf(ll_bf, lo_bf); if(desallocation != 0){ if(supprime_occupe_bf(desallocation, &lo_bf, &ll_bf) == 1){ printf("\n\nDésallocation bestfit de la taille %d bien effectuée. \n\n", desallocation); } else{ fprintf(stderr, "\n\nErreur, impossible de désallouer la taille %d.\n\n", desallocation); } afficher_bf(ll_bf, lo_bf); } else{ printf("\n\nPas de désallocation pour ce tour ! \n\n"); } lirecar("Encore (o/n)? ", &reponse); } while ((reponse == 'o') || (reponse == 'O')); detruire_liste(&ll_ff); detruire_liste(&lo_ff); detruire_liste(&ll_nf); detruire_liste(&lo_nf); detruire_liste(&ll_bf); detruire_liste(&lo_bf); /* C'est fini */ exit(0); }