Bonsoir à tous,
Après une petite recherche concernant mon problème sur google et aussi sur ce forum je me suis aperçu qu'il n'existait pas une solution unique à mon problème, voila pourquoi je viens vous embêter avec (encore) ce problème.
La compilation de mon programme avec l'option -Wall se déroule sans soucis mais dès le lancement de mon programme j'obtiens cette erreur *** stack smashing detected ***
Le plus bizarre étant que j'ai l'impression que pour le même code (inchangé) et bien cette erreur n'apparait pas tout le temps.
J'ai rapidement isoler la source, la fonction en question posant problème est une fonction important des fichiers textes dans la mémoire au démarrage de mon programme.
Quand dans mon main je /*commente*/ cette ligne le programme refonctionne directement puis dès que j'enlève les commentaires op ca me refait l'erreur puis j'attends un peut et des fois sa ce remet à fonctionner tout seul.
Voici le code en question de cette fonction, je ne peux vous fournir tout le code du programme il y à 12 fichiers différents et cette fonction n'est à elle seule qu'une partie d'un seul fichier :
Pour info : S_Professeur, S_Matiere, S_Salle, S_Type sont des alias de structure déclaré
dans un fichier structure.h "includé" dans le fichier contenant cette fonction. Les tableaux en question sont eux déclarer dans le main et transmit à la fonction au même endroits.
Voici les structures pour les tailles de mes chaines de caractère, cela pourra peut être vous aider :
Le code de ma fonction :
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
20
21
22
23
24 struct Cours { /*Definition de la structure Enseignement definissant une heure de cours dans l'emplois du temps*/ int use; char matiere[15]; char enseignant[10]; char salle[4]; char type[10]; }; struct Professeur{ /*Definition de la structure Professeur definissant une professeur pouvant enseigner*/ char prenom[15]; char nom[10]; }; struct Matiere{ /*Definition de la structure Matiere definissant une matiere pouvant etre enseignée*/ char nom[15]; }; struct Salle{ /*Definition de la structure Salle definissant toutes les salles de l'établissement*/ char nom[4]; }; struct Type{ /*Definition de la structure type definissant le type du cours enseigné (TD TP CM Exam Soutenance ...)*/ char nom[10]; };
A en croire ce qu'internet dis je cherche à écraser une adresse mémoire dans le systeme ou je n'ai pas le droit d'accéder. Mais la question est pourquoi ? J'ai relu mainte et mainte fois mon code sans trouver d'ou cela pouvais venir.
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 void chargement(S_Professeur professeur[], S_Matiere matiere[], S_Salle salle[], S_Type type[], int nb_occurence[]){ FILE* fichier=NULL; char nom[10], prenom[15]; int i=0; fichier=fopen("prof.txt", "r"); /*Récupération ligne par ligne dans mon fichier prof.txt du nom et prénom de mes professeurs, ces derniers étant déclaré un par ligne avec un espace entre le nom et le prénom*/ if (fichier!=NULL) { while(fscanf(fichier,"%s %s",nom,prenom)!=EOF){ strcpy(professeur[i].nom,nom); strcpy(professeur[i].prenom,prenom); i++; nb_occurence[0]++; /*nb_occurence est un tableau contenant dans l'élément 0 le nombre de prof saisie dans l'élément 1 le nombre de matière etc ... que je réutilise souvent*/ } } fclose(fichier); i=0; fichier=fopen("matieres.txt", "r"); if (fichier!=NULL) { while(fscanf(fichier,"%s",nom)!=EOF){ strcpy(matiere[i].nom,nom); i++; nb_occurence[2]++; } } fclose(fichier); i=0; fichier=fopen("salles.txt", "r"); if (fichier!=NULL) { while(fscanf(fichier,"%s",nom)!=EOF){ strcpy(salle[i].nom,nom); i++; nb_occurence[1]++; } } fclose(fichier); i=0; fichier=fopen("type.txt", "r"); if (fichier!=NULL) { while(fscanf(fichier,"%s",nom)!=EOF){ strcpy(type[i].nom,nom); i++; nb_occurence[3]++; } } fclose(fichier); }
J'espère que vous pourrez m'aider.
Un grand merci par avance au personne prenant le temps de me lire et de me répondre.
Bonne fêtes à vous tous.
JC
Partager