Bonjour tout le monde,
Depuis quelques heures je suis confronté à un problème de "segmentation fault" lors d'un appel de sprintf dans une des méthode de mon objet.
Voici mon code
et j'ai les deux méthodes suivantes qui appellent ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void FortranFile::write(double * d,long size) { unsigned short i = (sizeof(double)*size)%(0xFFFF+1); unsigned short e = (sizeof(double)*size)/(0xFFFF); char * str; if ( !fileIsOpened() ) open(); /*....*/ else if ( format == FortranFileFormat::TEXT ) { for ( long i = 0 ; i < size ; i++ ) { /*Le probleme intervient ici */ sprintf(str,"%f",*(d+i)); cout << str << endl; } } }
Et voici l'appel effectué avec le programme principal utilisé pour tester ma classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void FortranFile::write(double * d) { write(d,(long)1); } void FortranFile::write(double d) { write(&d,(long)1); }
le programme affiche bien 5.0000 qu'on effectue f.write(d) ou f.write(&d) alors que quand j'utilise un code du meme genre que ci-dessous il fonctionne parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int main(char * argv[],int argc) { double d = 5.0; FortranFile f("nom de fichier","w",FortranFileFormat::TEXT); f.write(d); f.close(); }
J'ai beau chercher je ne comprend absolument pas où est le problème dans ce code... si quelqu'un a une idée je suis vraiment preneur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int main(char * argv[],int argc) { double d[] = {5.0,6.0}; FortranFile f("nom de fichier","w",FortranFileFormat::TEXT); f.write(d,2); f.close(); }
Un grand merci d'avance à tout ceux qui jetterons un coup d'oeil par ici.
Partager