klaastyl don't shit where you eat | 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 :
- bool ImageLoader::loadImage( const string& filename, vector<unsigned short>& imgarray )
- {
- ifstream ifstr(filename.c_str());
- if (!ifstr.good())
- {
- cerr << "Failed to open the file "
- << filename
- << endl;
- printError( ifstr.rdstate() );
- return false;
- }
- imgarray.clear();
- imgarray.reserve(IMAGE_SIZE);
- // get length (number of characters) of file
- ifstr.seekg (0, ios::end);
- long length = ifstr.tellg();
- ifstr.seekg (0, ios::beg);
- // loading image into an array
- char *buffer = (char *) malloc(5 * sizeof(char));
- char *tokstr;
- ifstr.get(buffer, length+1, ifstr.eof());
- tokstr = strtok(buffer, "," );
- // fill the imgarray with the values extracted from the input image file
- while (tokstr != NULL)
- {
- imgarray.push_back(atoi(tokstr));
- tokstr = strtok (NULL, "," );
- }
- ifstr.close();
- return true;
- } // loadImage()
|
|