*** stack smashing detected ***: <unknown> terminated Abandon (core dumped

Résolu
FifiAbesoindaide Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
FifiAbesoindaide Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour/soir, voilà j'expose mon problème. Je suis en train de faire un tableau de pointeur et j'ai une erreur que je ne comprend pas.

Logement lirelog(FILE *fe) 
{
	Logement ligne;
	fscanf(fe," %s %s %s %s %s %s", ligne.idlog,ligne.cite,ligne.type, ligne.disp, ligne.adapte, ligne.idoccup);
	//fscanf(fe," %s", ligne.cite);
	//fscanf(fe,"%s  %s  %s  %s",ligne.type, ligne.disp, ligne.adapte, ligne.idoccup);
	
	return ligne;
}

int Chargement(Logement **TLog, int maxLog)
{
	int i=0;
	Logement *log;

	FILE *fe; 
	fe=fopen("logements.don","r"); 
	if (fe==NULL)
		{ printf("pb ouverture fichier\n"); return -1; }

	log=(Logement*)malloc(sizeof(Logement));
	if (log==NULL)
	 { printf("Problème malloc\n"); fclose(fe), exit(1);}

	*log=lirelog(fe);
	TLog[i]=log;

	while(feof(fe)==0)
	{	
		if (i==maxLog)
			{ printf("Pb capacité\n"); fclose(fe); return -1;  }
		log=(Logement*)malloc(sizeof(Logement));
		if (log==NULL)
	 	{ printf("Problème malloc\n"); fclose(fe), exit(1);}
	 	i++;

		*log=lirelog(fe);
		TLog[i]=log;

	}
	return i;

}

void AffichLogement(Logement **Log, int tailleLog)
{
	int i; 
	for (i=0; i<tailleLog; i++)
	{
		printf("%s %s %s %s %s %s \n",Log[i]->idlog,Log[i]->cite, Log[i]->type,Log[i]->disp,Log[i]->adapte,Log[i]->idoccup );
	}


}

void testGlobal(void)
{
	int tailleLog, maxlog=1000;
	Logement *TLog[1000];

	tailleLog=Chargement(TLog,maxlog);
	AffichLogement(TLog, tailleLog);

}



	int main(void)
{
	testGlobal();
	return 0;	
}

typedef struct{
	char idlog[6];
	char cite[20];
	char type[10];
	char disp[3];
	char adapte[3];
	char idoccup[7];
}Logement;


Ceci est mon code. Avec ce fichier texte "logements.don":

A1000 Cezeaux chambre D A RIEN
A1001 Cezeaux studio ND A E1025
A1002 Cezeaux T1 D NA
A1003 Cezeaux T2 D NA

J'obtiens le résultat de compilation :

A1000 Cezeaux chambre D A RIEN 
A1001 Cezeaux studio ND A E1025 
A1002 Cezeaux T1 D NA A1003 


Rien d'anormal je comprend.
Or je veux désormais afficher le résultat de compilation avec ce fichier texte (seule la 3e ligne change) :

A1000 Cezeaux chambre D A RIEN
A1001 Cezeaux studio ND A E1025
A1002 Cezeaux T1 D NA RIEN
A1003 Cezeaux T2 D NA

Cependant au lieu d'obtenir ceci :

A1000 Cezeaux chambre D A RIEN 
A1001 Cezeaux studio      ND A E1025 
A1002 Cezeaux T1            D NA RIEN


J'obtiens ce message d'erreur, si une âme charitable pouvait m'éclairer je serais aux anges.

*** stack smashing detected ***: <unknown> terminated Abandon (core dumped)


Cordialement,Fifi.

4 réponses

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,

Si un fichier core a été généré, il suffit de l'ouvrir avec ton débogueur pour y voir le problème exact.

Sinon une piste : ton code tel qu'il est, lit une ligne de plus que la taille réelle du fichier. L'indice
i
retourné par
Chargement()
en oublie toujours la dernière te masquant le problème (un bug peut en cacher un autre).
Ta fonction lirelog() n'a aucun moyen de retourner que les données lues sont absentes ou incohérentes, une interface
bool lirelog(FILE *fe, Logement *pLog)
permettrait un meilleur contrôle.
0