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

Langage Delphi Discussion :

Compression Huffman.Exception de SE.


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Compression Huffman.Exception de SE.
    bonjour,

    J'ai un probleme, mon soft doit compresser des données de type txt par la methode d'huffman, avec construction dynamique de l'arbre. Lorsque je parcours l'arbre pour assigner le code du caractere lu, je pars de la lettre et je descend vers le noeud principal. Pour détecter le noeud principal je regarde la probabilité du noeud (fréquence), et quand elle est egale a 100 je sort de ma boucle pour ecrire le code...
    Cela marche pour les premiers caractères(Nombre aléatoire), puis au bout d'un moment, quand PNoeud.Prob=100, on rentre quand meme dans la boucle et comme il n y a pas de racine(noeud principal) la nouvelle assignation d'adresse à PNoeud ne passe pas ("valeur inaccessible") et cela déclenche une exception.

    TableOfChar--> table des caracteres
    PNoeud--> pointeur sur element de TableOfChar ou sur un Noeud


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PNoeud:=@TableOfChar[i];
    
                while(  PNoeud.Prob<>100  ) do    //tant que l on est pas au noeud final
                begin
    
                  if (PNoeud.Poids=True) then bit:=1
                  else bit:=0;
                  CodeTmp:=CodeTmp or (bit shl(BitId));     //fabrication de l'octet
                  BitId:=BitId+1;
    
                  PNoeud:=PNoeud.Racine;                    //on va au noeud suivant
    
                end;

    ERREUR
    **********************************************************
    Violation d'acces à l'adresse 00451C0B dans le module.... Lecture de l'adresse 00000008.
    **********************************************************

    Je ne sait pas du tout d'ou cela peut provenir. Si quelqu'un a une idée...
    Merci d'avance.
    [Balises CODE rajoutées par Pedro.Merci d'y penser à l'avenir]

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PNoeud:=@TableOfChar[i];
    Que vaut i ? Est-ce que PNoeud est bien initialisé ? ( <>nil )
    Si PNoeud=nil alors on ne peut pas accéder à poids

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour ton conseil, cela provenait de la mauvaise initialisation de PNoeud.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compression Huffman en c.
    Par fred61 dans le forum Débuter
    Réponses: 14
    Dernier message: 11/08/2009, 14h05
  2. Algorithme de compression de Huffman, extention pour tout n.
    Par born_to_eat dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 30/10/2008, 15h28
  3. compresser avec l'executable de huffman
    Par memo07 dans le forum C++Builder
    Réponses: 0
    Dernier message: 30/11/2007, 01h47
  4. Réponses: 16
    Dernier message: 07/05/2006, 13h19

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