Probleme d'une chaine de caracteres

bilaloch Messages postés 556 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 31 octobre 2019 - 10 avril 2006 à 15:53
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 - 10 avril 2006 à 20:57
Bonjour a tous,

J'ai un ptit probleme au niveau d'une manipulation sur une chaine de caracteres. Voici le code :


<HR>

std::string *position = new std::string[2925];


std::string buf;


std::ifstream f(
"Icones\\Icones.pos");


f >> buf;


f.close();



int j;



for (i = 1; ;i++)


{


j = i * 3;


position[i] = buf.substr(j , 3); //C'est ici que se situe surement le bug... il ne me dit pas exactement où...



if (position[i] ==
"")


{



break;


}


}


<HR>

Il me renvoit dans le fichier "xstring" a la 13eme ligne, accompagné d'une boite de dialogue qui a trois boutons : "Break", "Continue" et "Ignore" avec ecrit dessus "Unhandled exception at 0x7c81eb33 in Meshes.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0012fbe0..".

Je ne comprends pas pourquoi... c'est pourquoi je voudrais que vous m'aidiez.

Merci beaucoup

9 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
10 avril 2006 à 16:03
On écrit dans la case 0 pas la 1 en premier...

if(!Meilleur("Joky")) return ERREUR;<
0
bilaloch Messages postés 556 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 31 octobre 2019 1
10 avril 2006 à 16:25
De quoi parles tu ?
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
10 avril 2006 à 16:29
ben position[i] -> position[1]
Enfin je sais pas trop
Tu veux faire quoi en faite ?

if(!Meilleur("Joky")) return ERREUR;<
0
bilaloch Messages postés 556 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 31 octobre 2019 1
10 avril 2006 à 16:35
lol mais non... puisqu'il y a une boucle. Et puis je le fais expres ne t'inkiete pas... Mais le bug je ne vois pas pourquoi il survient.

Merci quand meme.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
10 avril 2006 à 17:01
1) les strings vont de 0 à N-1 pour une taille de N
2) quelle taille à buf apres la lecture du fichier ?
car il est possible que tu essaies d'acceder à une zone de buf, qui n'existe pas
quand tu fais :

j = i * 3;
position[i] = buf.substr(j, 3);
0
bilaloch Messages postés 556 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 31 octobre 2019 1
10 avril 2006 à 17:37
ah oui... c'est possible :) . buf est une string. Donc c'est illimité. Mais sa taille lors du chargement est de 6 normalement ^^ .

BILALoch
0
bilaloch Messages postés 556 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 31 octobre 2019 1
10 avril 2006 à 17:38
ah oui... c'est possible :) . buf est une string. Donc c'est illimité. Mais sa taille lors du chargement est de 6 normalement ^^ .

PS : Ne pourrais tu pas me donner un exemple sur comment ouvrir un fichier ligne par ligne ou par blocs de 3 caractères s'il te plait ? Merci ;)

BILALoch
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
10 avril 2006 à 20:18
Une string n'est surement pas illimité... Si tu débordes dans un tableau, ca plante tout cours...
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
10 avril 2006 à 20:57
std::string *position = new std::string[2925];
ouf sen en fais des strings un peu trop meme car les strings utilise la memoire virtuels de la ou on parle que les strings sont quazi illimité , donc pourtoi ne fais pas juste

std::string position
...
apres tu contninue avec un seul string pas 2925
qui prend alors beaucoup d'espace memoire pour rien
0
Rejoignez-nous