IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

supprimer dernier élément d'une liste simplement chainée


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut supprimer dernier élément d'une liste simplement chainée
    Bonjour tout le monde,
    Je voudrais supprimer le dernier noeud d'une liste simplement chainée
    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    liste delete_last(liste I)
    {
    	liste p=I;
    	liste l=NULL;
    	liste t=NULL;
    	while(p->next->next!=NULL)
    	{
    	p=p->next;
    	}
    	l=p;
    	t=p->next;
    	l->next=NULL;
    	free(t);
     
     
    return I;	
    }
    Le problème c'est que lors de l'exécution il m'affiche une boite: debug error

    damage: after normal block (#46) at (0x00431E80)
    à ce qu'il parait il y a un problème dans le free parceque quand j'ai supprimé la ligne de free ça a marché!!
    Je ne sais pas quel est le problème
    aidez moi SVP
    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    "damage: after normal block" signifie qu'il y a eu un dépassement de buffer (quelque chose a écrit juste derrière une zone mémoire allouée).

    L'erreur est signalée par free(), mais le véritable problème (mauvaise écriture) a eu lieu avant.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 55
    Points : 72
    Points
    72
    Par défaut
    verifie aussi avant de boucler que tu as bien plus d'1 element
    sinon p->next->next

    et le pinteur l sert pas a grand chose p suffit

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	while(p->next->next!=NULL)
    Avant d'écrire une telle chose, il faut s'assurer que p n'est pas NULL et p->next n'est pas NULL, sinon on va droit au plantage.
    1- vérifier que la liste n'est pas vide
    2- si la liste a 1 seul élément, le détruire et déclarer la liste vide
    3- sinon, la liste a 2 ou plus éléments, rechercher l'avant dernier, mettre son champ next à NULL et détruire le dernier.

Discussions similaires

  1. Insertion d'un élément dans une liste simplement chainée triée (croissante)
    Par vayouva dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 14/11/2014, 09h29
  2. Réponses: 7
    Dernier message: 23/04/2008, 10h21
  3. Dernier élément d'une liste
    Par nabil148911 dans le forum SQL
    Réponses: 1
    Dernier message: 03/08/2007, 12h26
  4. Réponses: 12
    Dernier message: 04/03/2007, 11h43
  5. Supprimer des éléments d'une liste
    Par espadon1 dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2006, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo