Salut � tous.
Voila, je dois faire des lectures binaires sur un flux de la stl. Pour cela, je commence par l'ouvrir en binaire puis j'utilise une fonction pour lire les donn�es au fur et � mesure. J'ai mis au point deux versions de cette fonction:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 int yaread(struct SDL_RWops *context, void *ptr, int size, int maxnum) { std::istream* s = (std::istream*)context->hidden.unknown.data1; int taille=0; while(!s->eof() && taille<size*maxnum) { ((char*)ptr)[taille] = s->get(); taille++; } return taille/size; }Ne vous pr�occupez pas trop des deux premi�res lignes ni de la valeur de retour, cette fonction est appell�e par une biblioth�que qui n'est pas de moi.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 int yaread(struct SDL_RWops *context, void *ptr, int size, int maxnum) { std::istream* s = (std::istream*)context->hidden.unknown.data1; int beg = s->tellg(); s->seekg(0,ios::end); int end = s->tellg(); s->seekg(beg,ios::beg); int taille = size*maxnum<=end-beg?size*maxnum:end-beg; s->read((char*)ptr,taille); return taille/size; }
Il faut savoir que ces deux versions fonctionnent, j'arrive � charger correctement mon image (parceque c'est une image) et � l'afficher. Ensuite, l'objet contenant cette fonction est d�truit, le flux est ferm� et mon programme continue son ex�cution (c'est un jeu de soci�t�, ca peut prendre longtemps).
Le probl�me est que si j'utilise la version num�ro 2 de cette fonction, le destructeur du flux provoque un plantage en acc�dant � une portion de m�moire invalide (je rapelle que ce destructeur est appel� longtemps apr�s l'ex�cution de ma fonction.
Je pourrais bien sur n'utiliser que la premi�re version de cette fonction, mais elle est incroyablement lente (forc�ment, si on lit les octets un � un...).
Quelqu'un verrait-il ou est l'erreur? J'utilise visual studio 2005.
Partager