Segmentation fault, C++

Fermé
mwouaz Messages postés 3 Date d'inscription mardi 3 mai 2011 Statut Membre Dernière intervention 5 mai 2011 - 4 mai 2011 à 00:00
mwouaz Messages postés 3 Date d'inscription mardi 3 mai 2011 Statut Membre Dernière intervention 5 mai 2011 - 5 mai 2011 à 19:53
Bonjour,

J'ai un gros problème. Dans le cadre d'un projet d'informatique, je fais appel à une fonction qui me permet de copier le contenu d'un fichier texte (un dictionnaire, "dico.text") dans une matrice.
Le problème est que mon compilateur ne me renvoie aucune erreur lors de la compilation mais bien lors de l'exécution du programme. Le gros problème est aussi que je n'arrive pas à comprendre l'erreur faite !

En fort (très fort) résumé, voici mon code :

#include <iostream>;
#include <ctime>;
#include <cstdlib>;
#include <fstream>;

using namespace std;

const int TAILLE = 25;
const int LENGTH = 361000;
typedef char Word[TAILLE];

int getLenghtDico()
{
int numberOfDicoWords = 0;
Word word;

ifstream dico("dico.txt");

while (!dico.eof())
{
numberOfDicoWords++;
dico >> word;
}
dico.close ();

cout << "Jusque là ok !" << endl;
return numberOfDicoWords;
}

void dicoCopy (char dicoList[][TAILLE])
{
Word lineWord;

ifstream dico("dico.txt");
cout << "Nous pénétrons dans le dico !" << endl;

for (int ligne = 0; ligne<LENGTH; ligne++)
{
dico >> lineWord;
for (int lettre = 0; lineWord[lettre]!='\0'; lettre ++)
{
dicoList[ligne][lettre] = lineWord[lettre];
}
}
dico.close ();
}

int main ()
{
cout << "What the hell! On y va" << endl;
char dicoList[LENGTH][TAILLE];
cout << "Ici, rien à signaler" << endl;

dicoCopy(dicoList);

cout << "Dico.. Done!" << endl;
for (int i = 0; i<LENGTH; i++)
{
for (int j=0; dicoList[i][j]!='\0';j++)
{
cout << dicoList[i][j] << " ";
}
cout << endl;
}
}


Précisions :

- La première fonction, qui me donne la taille du dictionnaire devrait normalement être utilisée pour déterminer la dimension première de la matrice dicoList[longueur Dico] [TAILLE] . J'ai cru d'abord que le problème venait de là, et qu'il fallait une constante dans la première dimension. Mais même comme ça j'y arrive pas.
Cette fonction est correcte et fonctionne bien, je l'ai utilisée avant de faire intervenir la matrice dicoList et elle fonctionnait parfaitement bien...

- Les cout (au message parfois douteux) sont uniquement là pour voir où le programme s'est arrêté de fonctionner... Il s'avère qu'aucun cout (même le premier du main !) ne fonctionne...


Je sais que le code est un peu long mais une aide serait la bienvenue, et ceci le plus rapidement possible !

Merci à tous.



1 réponse

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 662
Modifié par Pacorabanix le 4/05/2011 à 01:39
const int LENGTH = 361000;    

...   


int main ()   
{   
    ...   
    char dicoList[LENGTH][TAILLE];  



ceci devrait poser problème. C'est un tableau trop gros je pense.

Et c'est une erreur à l'exécution car le compilateur ne vérifie pas ce genre de choses.

et l'erreur apparait avant l'affichage, car le compilateur (encore lui) a surement choisi de faire l'allocation mémoire du tableau avant le reste du code.
0
mwouaz Messages postés 3 Date d'inscription mardi 3 mai 2011 Statut Membre Dernière intervention 5 mai 2011
4 mai 2011 à 21:16
En effet. Merci beaucoup !
Mnt ça fonctionne, même s'il m'affiche (surtout à la fin) parfois des caractères bizarres :


Z Y K L O N S
Z Y M A S E
Z Y M A S E S
Z Y M O T E C H N I E _ ?
Z Y M O T E C H N I E S
Z Y M O T I Q U E ? ? _ ?
Z Y M O T I Q U E S ? p ?
Z Y T H O N
Z Y T H O N S
Z Y T H U M
Z Y T H U M S


A quoi pourrait être dû ceci ?
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 662
Modifié par Pacorabanix le 5/05/2011 à 11:35
ce serait possible que tu nous donnes le fichier dictionnaire .txt que tu utilises ? en le mettant en ligne via cjoint ou un truc du genre.

(c'est surement à cause de caractères spéciaux, genre accents, etc... tout ce qui est non-ASCII)
0
mwouaz Messages postés 3 Date d'inscription mardi 3 mai 2011 Statut Membre Dernière intervention 5 mai 2011
5 mai 2011 à 19:53
Y a aucun caractère autre que ceux compris entre A et Z : que des lettres majuscules sans accents ni ponctuation.
(J'sais pas trop comment joindre le dico..)

Un assistant a trouvé une manière de contourner le problème, je n'en ai donc plus.

Merci bcp pour ton aide !
0