Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2963 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] classe Vector pas puissante ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] classe Vector pas puissante ?

n°960242
klaastyl
don't shit where you eat
Posté le 23-01-2005 à 21:00:03  profilanswer
 

salut tous le monde,
 
voilà je voudrais charger un fichier en mémoire. ce fichier est constitué d'une suite de caractères séparés par des virgules, comme dans l'exemple suivant: 775,763,760,770,775,806,784,776,792,779,782,767,818,767,788,789,778,
pour ça j'utilise la classe Vector.
 
Le problème est que le chargement se passe bien sur des petits fichiers de quelques centaines de caractères, mais dès que je veux charger les fichiers avec lesquels je dois travailler qui font 1.39Mo, soit 1 466 408 caractères et bien ça plante !!!
 
Je ne sais pas d'où vient exactement le problème, mais je soupçonne la classe Vector d'être limité en taille, bien que la reservation de la mémoire se passe sans pb à la compilation. Mais si c'est ça le problème, je ne vois pas dans quel type de container je pourrais alors charger ce fichier !!! :??:  
 
Donc si qqn pouvait m'aider sur ce point ça serait bien sympa.
 
voici le source de la fonction qui permet le chargement:
 

Code :
  1. bool ImageLoader::loadImage( const string& filename, vector<unsigned short>& imgarray )
  2. {
  3. ifstream ifstr(filename.c_str());
  4. if (!ifstr.good())
  5. {
  6.  cerr << "Failed to open the file "
  7.    << filename
  8.    << endl;
  9.  printError( ifstr.rdstate() );
  10.  return false;
  11. }
  12. imgarray.clear();
  13. imgarray.reserve(IMAGE_SIZE);
  14. // get length (number of characters) of file
  15. ifstr.seekg (0, ios::end);
  16. long length = ifstr.tellg();
  17. ifstr.seekg (0, ios::beg);
  18. // loading image into an array
  19. char *buffer = (char *) malloc(5 * sizeof(char));
  20. char *tokstr;
  21. ifstr.get(buffer, length+1, ifstr.eof());
  22. tokstr = strtok(buffer, "," );
  23. // fill the imgarray with the values extracted from the input image file
  24. while (tokstr != NULL)
  25. {
  26.  imgarray.push_back(atoi(tokstr));
  27.  tokstr = strtok (NULL, "," );
  28. }
  29. ifstr.close();
  30. return true;
  31. } // loadImage()

mood
Publicité
Posté le 23-01-2005 à 21:00:03  profilanswer
 

n°960303
SquiZZ
Posté le 23-01-2005 à 22:07:49  profilanswer
 

c'est connu, quand un programme merde, ca vient du code utilisé par des millions de personnes, pas de son propre code.
 
question à 100 balles :
combien tu alloues de mémoire avec ton malloc ?
combien tu mets de données dedans avec ton ifstr.get ?
 

n°960331
bjone
Insert booze to continue
Posté le 23-01-2005 à 22:46:53  profilanswer
 

1) malloc() sans free()
2) malloc() pour 5 chars ?
 

n°960333
Lam's
Profil: bas.
Posté le 23-01-2005 à 22:49:45  profilanswer
 

Je +1 avec les 2 questions de SquiZZ. Fourrer tout un fichier dans une chaîne de 5 octets, c'est pas tous les jours la joie...

n°960334
klaastyl
don't shit where you eat
Posté le 23-01-2005 à 22:50:05  profilanswer
 

:whistle:  :whistle:  :whistle:  
 
malloc, malloc, maloque, ma loque...effectivement !!!
 
merci pour cette aide, sur un ton un peu condescendant, mais c'est un coup de main quand même !!!  :jap:

n°960336
Lam's
Profil: bas.
Posté le 23-01-2005 à 22:52:56  profilanswer
 

Bof, c'est dimanche soir. On se prépare pour le Lundi matin et les mecs en IUT qui auront pas fini leur TPs à rendre et qui vont nous pourrir le forum toute la journée :D

n°960337
klaastyl
don't shit where you eat
Posté le 23-01-2005 à 22:55:35  profilanswer
 

n'empêche compilo à la c** !!! et la tu vas pas me contredire Squizz, il aurait pu le voir ça !!!
 
Bon en tout cas, je donne la version corrigée, au cas il y aurait des étourdis comme moi, qui un jour tomberaient sur le même os.
 

Code :
  1. bool ImageLoader::loadImage( const string& filename, vector<unsigned short>& imgarray )
  2. {
  3. ifstream ifstr(filename.c_str());
  4. if (!ifstr.good())
  5. {
  6.  cerr << "Failed to open the file "
  7.    << filename
  8.    << endl;
  9.  printError( ifstr.rdstate() );
  10.  return false;
  11. }
  12. imgarray.clear();
  13. imgarray.reserve(IMAGE_SIZE);
  14. // get length (number of characters) of file
  15. ifstr.seekg (0, ios::end);
  16. long length = ifstr.tellg();
  17. ifstr.seekg (0, ios::beg);
  18. // loading image into an array
  19. char *buffer = (char *) malloc(length+1 * sizeof(char));
  20. char *tokstr;
  21. ifstr.get(buffer, length+1, ifstr.eof());
  22. tokstr = strtok(buffer, "," );
  23. // fill the imgarray with the values extracted from the input image file
  24. while (tokstr != NULL)
  25. {
  26.  imgarray.push_back(atoi(tokstr));
  27.  tokstr = strtok (NULL, "," );
  28. }
  29. ifstr.close();
  30. return true;
  31. } // loadImage()


Message édité par klaastyl le 23-01-2005 à 22:58:33
n°960340
Lam's
Profil: bas.
Posté le 23-01-2005 à 22:56:53  profilanswer
 

Pourquoi tu n'utilises pas tout simplement une string et un getline ?

n°960341
SquiZZ
Posté le 23-01-2005 à 22:57:21  profilanswer
 

klaastyl a écrit :

n'empêche compilo à la c** !!! et la tu vas pas me contredire Squizz, il aurait pu le voir ça !!!


 
j'aurais plutôt dis "codeur à la con", quoi que codeur n'est peut être pas le terme approprié  :sarcastic:

n°960342
klaastyl
don't shit where you eat
Posté le 23-01-2005 à 22:59:07  profilanswer
 

:kaola:  :kaola:  :kaola:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] classe Vector pas puissante ?

 

Sujets relatifs
[Débutant] Problème de classeClasse Vector sou super Waba (pour PDA)
Classe non reconnueboost::filesystem classe dérivée de path() pour se simplifier la vie
Ajout d'un package dans la classe javax?!spécialisation de fonctions membres (template) d'une classe template
Ajouter des éléments dans un vector.suppression d'un élément dans un vector
Importer un classe existante dans une jsp 
Plus de sujets relatifs à : [C++] classe Vector pas puissante ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR