Probleme de segmentation fault avec sprintf
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
Code:
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 j'ai les deux méthodes suivantes qui appellent ce code :
Code:
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);
} |
Et voici l'appel effectué avec le programme principal utilisé pour tester ma classe :
Code:
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();
} |
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:
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();
} |
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.
Un grand merci d'avance à tout ceux qui jetterons un coup d'oeil par ici.