Bien le bonjour !

Alors pour faire court, je faisait une petite classe permettant de coder un texte (en fait de le compresser) par la méthode d'Huffman, rien de bien compliqué.

Je ne suis pas sûr de mon algo, mais là n'est pas le problème.
En effet, je compile et tout se passe à merveilles, sauf que arrivé à un point du prog, ça plante (j'ai un beau message windaube ^^ : xxxx.exe a rencontré un problème et doit fermer...) systématiquement au même endroit.

J'ai pensé à un souci de pointeur ou qqchose dans le genre, mais le compilo ne bronche pourtant pas...

Précisions :
IDE -> Dev-C++ 4.9.9.2
OS -> WinXP
APP -> Appli DOS (donc pas de Framework)


Voilà les codes de mon main, mon code_huffman.h et .cpp :

main.cpp
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
18
19
20
21
22
#include <iostream>
#include <string>
 
#include "code_huffman.h"
#include "decode_huffman.h"
 
using namespace std;
 
 
int main()
{
	string phrase;
	Code code;
 
	cout << "***** Entrer la phrase a coder *****" << endl << endl;
	getline(cin, phrase);
 
	code.coder(phrase);
 
	system("PAUSE");	
	return EXIT_SUCCESS;
}
code_huffman.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef CODE_HUFF
#define CODE_HUFF
 
class Code
{
      public:
             Code();
             void coder(std::string phrase);
 
      private:
              char m_phrase_base[];
};
#endif
code_huffman.cpp
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <string>
#include <vector>
#include "code_huffman.h"
 
using namespace std;
 
Code:: Code()
{    
}
 
void Code:: coder(string phrase)
{
       strcpy(m_phrase_base, phrase.c_str());
 
       cout << "Vous avez saisi : \"" <<m_phrase_base <<"\"" << endl;
       cout << "Codage en cours..." <<endl;
 
       int  taille=strlen(m_phrase_base); // on récupère la taille de la chaine
       char tab_char[]= "";               // pour stocker les lettre "noeuds" de l'arbre d'Huffman
       vector <int>  tab_occur;           // nombre d'occurences des noeuds
       int  pos_tabs=0;                   // position dans tab_char et dans le vecteur
 
 
       for(int i=0; i<taille; i++)        // parcours de la chaine de caractères
       {
        if(i==0)    // premier caractère
        {
           tab_char[pos_tabs]=       m_phrase_base[i];
           tab_occur[pos_tabs]=      1;
        }
 
        else
        {
            int j=i-1;                    // indice de parcours du tableau de noeuds
            bool ajouter_char= true;      // permet de savoir si on a un nouveau noeud à ajouter ou pas
 
            do
            {
             if(m_phrase_base[i]!=tab_char[j]) // teste si l'on a pas encore rencontré le caractère
                                               // en comparant au tableau de noeuds
             {
               j--;                            // si c'est le cas on compare avec le reste du tableau
             }     
 
             else
             {
                 j=0;                          // sinon on arrête de comparer
                 ajouter_char= false;
                 tab_occur[j]+= 1;             // et on rajoute une occurence au noeud en question
             }
            }
            while(j>0);
 
            if(ajouter_char)                   // ajout d'un noeud
            {
                pos_tabs++;
 
                tab_char[pos_tabs]=   m_phrase_base[i];
                tab_occur[pos_tabs]+= 1;
            }
        }
       }
 
// affichage du tableau de noeuds       
       for(int i=0; i<pos_tabs; i++)
              cout << tab_char[i] << " | ";
 
       cout << endl;
 
// affichage du vecteur d'occurences       
       for(int i=0; i<pos_tabs; i++)
              cout << tab_occur[i] << " | ";
}
une idée sur le pourquoi du comment ?