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 : 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 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
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 : 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();	
}
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,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.