Fopen : segmentation fault

pyhrrus -  
 pyhrrus -
Bonjour tout le monde !
Alors voilà j'ai un petit souci avec un morceau de code de mon projet informatique.
Quand je rentre un nom de fichier invalide (un fichier qui n'existe pas ), le programme crash avec une erreur de segmentation. Voilà la partie du code incriminée.
Petite précision je compile et je code dans une virtualbox qui émule Ubuntu.

struct tabseg_cib

{

	float***segm;  

	float**point;

	float* coord;

	float**pt_cibles;

	float* cibles;

	int ns;

};


typedef struct tabseg_cib TABSC;

static TABSC tabseg_cibl;



int lecture(char *fich) 

{

	int i=0;

	float x,y,x2,y2;

	char chaine[60];

	float* temp_coord=NULL;

	float temp[3]; // stockage temporaire avant conversion des coord.

	FILE *fichier;

	

	fichier= fopen(fich,"r");        

	                    

	if (fichier == NULL)

	{

		printf("Impossible d'ouvrir le fichier \n");

		return 0;

	}

	else

		while(fgets(chaine,60,fichier)!=NULL)							

		{

			if(chaine[0] == '#' || chaine[0] == '\n' || chaine[0]=='\r')

				continue;

				//tant qu'on ne rencontre pas de valeurs aptes à être

				//stockées	

			

			else if(!tabseg_cibl.ns) // on stocke ns:"nbre_de_seg"

			{ 

				sscanf(chaine,"%d", &tabseg_cibl.ns);

				

				if(tabseg_cibl.ns==0) //cas de 0 segments à éliminer

				{

					printf("pas de segments \n"); 

					fclose(fichier);

					return 0;

				}

				

				temp_coord=tabseg_cibl.coord;

			}

			

			else if (i<tabseg_cibl.ns) 

			{

				sscanf(chaine,"%f %f %f", &temp[0],

										  &temp[1],

										  &temp[2]); 

				*temp_coord = temp[0];

				*(temp_coord+1)=temp[1];

				*(temp_coord+2)=temp[0]+ L*cos(M_PI*(temp[2]/180)); 

				*(temp_coord+3)=temp[1]+ L*sin(M_PI*(temp[2]/180));

				temp_coord=temp_coord+4; 

				i++;

				//conversion des coordonnées vers cartésien

			}

			

			else if(i==tabseg_cibl.ns)									 

			{

					// on stocke les cibles en mémoire

				sscanf(chaine, "%f %f %f %f", &x, &y,&x2,&y2);

				tabseg_cibl.cibles[0]=x;

				tabseg_cibl.cibles[1]=y;

				tabseg_cibl.cibles[2]=x2;

				tabseg_cibl.cibles[3]=x2;

				i++;

			}

				

		}

		fclose(fichier);

		return 1;

}







En vous remerciant par avance.

1 réponse

pyhrrus
 
En vérité le problème était dans un autre module.
Le programme crash à chaque appel de edittext->set_text("message")

où edittext est bien déclaré dans le namespace...
En vérité j'ai cru que le problème venait de là parce que
set_text n'a aucune raison valable de causer une segmentation fault.
Si vous avez une solution de ce côté là elle serait la bienvenue.
0