Salut,
Alors que je pensais faire un prog tout simple qui lit dans un fichier, j'ai eu ce probleme.
le prog lit dans un fichier les lignes qu'il trouve. Un jeu de donnees se compose d'un titre commençant par '!' et des donnees (ici du texte, mais peut-etre des donnees bianires).
A l'aide du debugger ddd, je vois que la chaine _s n'est pas effacee.
Code :
- #include <iostream>
- #include <fstream> //ifstream = lecture fichier
- using namespace std;
- class B{
- public:
- char* _s;
- string _str;
- B(char* chaine="" ){
- _str = string (chaine);
- // _s = (char*) malloc(2560*sizeof(char));
- _s = new char[2560];
- cout << "qllocation de _s\n";
- }
- ~B(){
- cout << "dstr A\n";
- /* if(s)
- free(_s);*/
- delete[] _s; //n'efface rien en memoire
- _s = NULL; //sans ca, _s toujours actif
- }
- };
- B* Bload(ifstream &fe)
- {
- char line[256];
- char x;
- char* ptr = &x;
- B* b = NULL;
- while(fe.get(*ptr))
- {
- if(*ptr=='!')
- if(b == NULL)
- {
- fe.getline(line, 256);
- b = new B(line);
- ptr = b->_s;
- }
- else
- {
- fe.unget();
- break;
- }
- else if(*ptr != '\n')
- {
- if(b == NULL)
- b = new B();
- ptr++;
- }
- }
- cout << "b->_str = " << b->_str
- << "\tb->_s = " << b->_s << endl;
- return b;
- }
- int main(void)
- {
- int i;
- ifstream fe("dat.txt" );
- B* b = NULL;
- for(i=0; i<3; ++i)
- {
- b = Bload(fe);
- delete b; //marche pas correctement
- }
- return 0;
- }
|
et le fichier dat.txt
!1e serie de donnees1
ici les premieres donnees rencontrees
sur plusieurs lignes
!donnees 2.
la se trouvent les donnees de la 2e serie
!derniere serie
enfin je termine ici |
Merci de m'eclairer sur ce pb de memoire.
KooK
Message édité par KooK le 03-08-2005 à 12:25:29