begin process at 2012 05 30 08:49:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

Segmentation fault, C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Segmentation fault, C++

mercredi 4 mai 2011 à 00:03:47 | Segmentation fault, C++

mwoua3

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.

PS : désolé de l'indentation.. Il est possible que le copier coller ne fonctionne pas bien :/
mercredi 4 mai 2011 à 00:05:16 | Re : Segmentation fault, C++

mwoua3

Ah oui, comme mis dans le titre, l'erreur est "Segmentation Fault".
Je compile avec Xcode, sur Mac.
mercredi 4 mai 2011 à 10:22:14 | Re : Segmentation fault, C++

CptPingu

Administrateur CodeS-SourceS
Ça plante parce que la taille de TAILLE est trop grande... (Diminue là et ça passera).

J'ai beaucoup de remarques à faire:
- Évite les "using namespace", voir: [ Lien ]
- #include ne finit pas par un ";"
- Vérifie la réussite de l'ouverture du fichier avec un: "if (!dico) { std::cerr << "Error" << std::endl; return 0; }"
- while(!dico.eof()) => while(dico)
- N'utilise pas de tab[][], utilise du C++, c'est-à-dire: std::vector ou std::list, dont la taille est dynamique.
- Idem pour le chaîne de caractères, à la place de char* ou de char[], utilise std::string.
- "return 0" à ajouter à la fin du main.

Que contient dico.txt ?
Si c'est juste des mots, il te faut un std::vector<std::string> ou un std::list<std::string>. (Ça te prendra 3 lignes à faire :p).

PS: Tu as une balise code dans le forum, pour présenter le code correctement.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mercredi 4 mai 2011 à 10:30:27 | Re : Segmentation fault, C++

CptPingu

Administrateur CodeS-SourceS
Comme c'est ultra simple, je te propose même une version:
Code C/C++ :
#include <iostream>
#include <fstream>
#include <vector>

typedef std::vector<std::string>::const_iterator iter;

bool loadDico(const std::string& filename, std::vector<std::string>& dico)
{
  std::ifstream file(filename.c_str());

  if (!file)
    return false;

  std::string word;
  while (file >> word)
    dico.push_back(word);

  return true;
}

int main()
{
  std::vector<std::string> dico;
  if (!loadDico("dico.txt", dico))
  {
    std::cerr << "Unable to load file" << std::endl;
    return 1;
  }

  // Inutile, juste pour information
  std::vector<std::string> dicoCopy;
  dicoCopy = dico; // Pas besoin de dicoCopy(dicoList); Juste un = à faire :)

  // Iteration
  std::cout << "Methode 1" << std::endl;
  for (iter it = dico.begin(); it != dico.end(); ++it)
    std::cout << *it << std::endl;

  // Autre méthode, moins bien ! Fonctionne pour std::vector,
  // mais pas les autres commme std::list...
  std::cout << "Methode 2" << std::endl;
  for (size_t i = 0; i < dico.size(); ++i)
    std::cout << dico[i] << std::endl;

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mercredi 4 mai 2011 à 20:10:06 | Re : Segmentation fault, C++

mwoua3

Ah ! Merci bcp :)

Le truc c'est que justement, ils veulent pas qu'on utilise d'autres bibliothèques (j'sais même pas si ça s'appelle comme ça) que les 4 reprises ci-dessus.

Ils veulent aussi qu'on présente absolument notre code de cette manière là, avec des Mat[][] et des Vect[]
De la même manière,
"

Code C/C++ :
#include <iostream>; 
#include <ctime>; 
#include <cstdlib>; 
#include <fstream>; 

using namespace std; 

"

C'est le début du code et c'est obligatoire de le présenter comme ça.

Enfin... Merci pour la réponse ! :)
Le but est de faire un pendu et une recherche dichotomique...

Encore merci.
Bye !
mercredi 4 mai 2011 à 21:19:33 | Re : Segmentation fault, C++

mwoua3

Ah tiens, j'ai une question :

Mnt ça fonctionne, mais 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 ? Ils ne sont pas présents dans le fichier dico.txt... Et jusqu'à la lettre Z y a aucun problème...
mercredi 4 mai 2011 à 22:16:35 | Re : Segmentation fault, C++

mwoua3

J'ai même des



Z O A N T H R O P I E ? ?
Z O A N T H R O P I E S

Z O B e r s / f r e d e r i c c Z O B S e r / D e s k t o p
Z O B S e r / D e s k t o p
Z O D I A C
Z O D I A C A L

... Je comprends pas.. Ca le fait à chaque fois et pas toujours au même endroit ni de la même façon.
lundi 9 mai 2011 à 15:44:57 | Re : Segmentation fault, C++

ismail22425

bonour les amis !
quelque peut m'aidé j'ai le meme problème que " mwoua3" sous ns2.34 j'ai develloper une nouveau module sous l'unix avec C++ quant je compile sa marche bien mais quand je lance l'execution a partir de script tcl
il m'affche un erreur fault segmentation???


Cette discussion est classée dans : taille, int, cout, dico, dicolist


Répondre à ce message

Sujets en rapport avec ce message

convertir du cpp en VB.net ou VB [ par Taur33 ] bonsoir à tous, j'aurais besoin de convertir le code suivant en vb je précise que j'ai déjà essayé des logiciels qui soit disant le faisait mais cela probleme de debug [ par elhajjajireda ] si le vous plait j'ai placé un breakpoint sur ma fonction principale linge22 ou s'est écrit l'instruction " Image2.Load(argv[2]); sur Windows et avec retour à la ligne [ par DarkC0 ] #include #include #include #include #include #include void retourLigne(int x, int y); void cadre_T(); void Color(int couleurDuTexte,int couleur Probleme allocation C++ [ par elite182 ] Bonjour a tous , je dois réaliser une fonction qui range des grands nombres dans un tableau d'entier, ( ex : 2 333 546 donnera : Tab[0] = 546; tab exercice C++ [ par maina87 ] Bonjour, je suis débutante e C++ et j'ai eu a faire a un exercice, svp corrigez le moi: Voilà l'exercice: Donnez le résultat du code suivant: int taille d'une matrice [ par badsha ] je cherche un programme qui calcule la taille d'une matrice.(sur matlab c simple : size(matrice) est basta). j'ai trouvé un code qui calcule la taill [clos] bjr, pourriez vous m'aider a terminer ce progmme stp? [ par ley1805 ] #include #include #include #include struct noeud { struct noeud *gauche; int info; struct noeud *droite; }; typedef struct noeud *pnoeud; pno Besoin d'aide-Interface Graphique [ par nissan1 ] Bonjour, s'il vous plait je suis debutant en programmation et j'ai fait un programme en C sous l'IDE codeblocks, qui utilise les elements d'une matri Problème de définition de fonction dans une classe [ par labuche75 ] Bonjour à tous, je rencontre un problème à priori de définition de fonction dans la classe tableau permettant de manipuler de grands entiers nécessair Probleme Erreur Segmentation [ par kyubi6363 ] Voila sa compile bien mais erreur de segmentation quand je lance. Pouvais vous me dire ce qu'il ne va pas :) #include #include #define TAILLE_LARG


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales