Langage c erreur dans la procedure supprimer

nawfal -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

s'il vous plait queql'un pourrait me corriger l'erreur dans cette fonction .

void supprimer_employer(employer *t,int nbr_employer)
{
char ch;

printf("voulez vous supprimer tous vos employees ? (o/n): ");
scanf(" %c",&ch);
if(ch=='o'||ch=='O')
{
free(ajout_employer(t,*nbr_employer)); // c'est ici qu'il m'affiche l'erreur
nbr_employer=0;
printf("\nEmployees supprimer avec succees !!");
}
}
-----------------------------------------------------------
erreurs:
-invalid type argument of 'unary
- [Warning] passing arg 1 of 'free' makes pointer from integer without a cast

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,
    Beh le message est clair.
    nbr_employer est un int, tu t'en sers comme pointeur. Ne te trompes-tu pas de variable ?
    0
    1. nawfal
       
      non je me trompe pas.
      et meme si je remplace le pointeur par une adresse ca affiche 2 warnig :/
      [Warning] passing arg 2 of 'ajout_employer' makes integer from pointer without a cast
      [Warning] passing arg 1 of 'free' makes pointer from integer without a cast

      -et la fonction free c'est comme que ca que ca s'ecrit avec la fonction ajout_employer ??? ??
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Je n'ai pas une vision complète du programme donc je ne peux pas juger.
      En revanche, ce que je peux dire c'est que : free(ajout_employer(t,*nbr_employer));
      n'a aucun sens.
      Car nbr_employer est de type int et non de type int *. Pour connaître la syntaxe, il faudrait au moins avoir le prototype de la fonction ajout_employer().
      Par ailleurs tu fais un free() d'un ajout_employer(). Je ne sais pas ce que renvoie la fonction ajout_employer(), mais faire la désallocation d'une allocation c'est étrange. Est-ce voulu ?
      0
  2. nadir abdelilah Messages postés 2 Statut Membre
     
    Bonsoir,

    free(ajout_employer(t,*nbr_employer)); ça n'a aucun sens ! ! ! ! :O

    tu as deja un tableau ou tu stock les employer alors si tu veaux suprimmé tt tu peux tt simplement faire :

    free(Tab);
    Tab = NULL;
    nombre_employé = 0;

    voilàà ;) et bn courage .
    0
    1. nawfal
       
      Merciii beaucoup pour l'aideee ^^ (y)
      0
    2. nadir abdelilah Messages postés 2 Statut Membre
       
      de rien . et n'oublie pas NULL en majuscule c obligatoire
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Non ce n'est pas obligatoire même si conseillé. De plus il faut pas vider le conteneur brutalement mais tout vider petit à petit (réponse de HooS) sinon il y aura une fuite mémoire.
      0
  3. JooS Messages postés 2705 Statut Membre 228
     
    Salut !
    Il faut qu'au fur et a mesure que tu parcours ta liste d'employés (Je suppose que c'est une LLC), tu supprime l'employé en cours, jusqu'à que tu atteint la fin de la liste !

    Exemple LLC :
    parcour = *t;
    
    while(parcour != NULL) { //tant qu'on a pas atteint la fin de la liste
      supp = parcour;
      free(supp); //on libere le maillon en cours
      parcour = parcour->suiv; //on avance dans la liste
    }
    *t = NULL; //tete de liste vide
    0