Bonjour,
Je suis débutant en c++. Je cherche a lire un fichier sous la forme suivante :
Citation :
1.2.3.4.5.6.7.8.9.10
10.8.7.6.5.4.3.2.1.0
|
Je veux le stocker dans une var map[x][y].
map[1][0] est égal à 2.
map[0][1] est égal à 1.
map[1][1] est égal à 0.
etc..
Donc, j'ai codé une petite fonction (et ça ma pris un temps fou) ReadMapFile() :
Code :
- void ReadMapFile(char *filename, unsigned int map[250][250]){ //lis et stock la map d'un fichier
- char * pMapChar[250];
- unsigned int * pMap[250];
- int x=0;
- int y=0;
- char MapChar[250][250];
- char *splitchar;
- ifstream MapFile(filename);
- if(!MapFile){
- cout<<"Erreur d'ouverture \n";
- exit(1);
- }
- else
- {
- while(!MapFile.eof()){
- cout<<endl<<"y : "<<y<<endl;
- pMapChar[y]=&MapChar[0][y];
- MapFile.getline(pMapChar[y], 30000);
- cout<<pMapChar[y]<<endl;
- splitchar=strtok(pMapChar[y], "." );
- pMap[y]=&map[0][y];
- *pMap[y]=atoi(splitchar);
- cout<<*pMap[y];
- while(splitchar!=NULL){
- splitchar=strtok(NULL, "." );
- if(splitchar!=NULL){
- *pMap[y]=atoi(splitchar);
- cout<<*pMap[y];
- }
- }
- y++;
- }
- MapFile.close();
- }
- }
|
Le problème c'est que j'ai une segfault a la fin, parce que je getline dans la semoule.
Citation :
y : 0
1.2.3.4.5.6.7.8.9.10
12345678910
y : 1
10.9.8.7.6.5.4.3.2.1
10987654321
y : 2
Erreur de segmentation
|
Donc, pourquoi alors que j'ai un !MapFile.eof() comme condition du while, et que je crois jurer qu'il n'y a pas cette ligne numéro 3 (y=0, y=1 mais pas plus) et pourtant, la condition est quand même validée?
Ça doit surement être très simple, mais je vois vraiment pas.
merci d'avance
crygor