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

Résolu/Fermé
FifiAbesoindaide Messages postés 7 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 29 décembre 2019 - 26 déc. 2019 à 20:19
FifiAbesoindaide Messages postés 7 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 29 décembre 2019 - 29 déc. 2019 à 21:06
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.
A voir également:

4 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
27 déc. 2019 à 09:36
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