Le C++ nous mène-t-il au suicide ???

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 25 juin 2005 à 02:31
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 25 juin 2005 à 14:01
Lol question très explicite :)
Donc je comprend plus rien du tout :)
Desfois ça marche, desfois non, desfois il plante, desfois non, desfois il compile, desfois il tape des crises... Help Me !!! Lol

Donc en faite, j'explique le principe, il charge un fichier que vous choisissez, il le coupe en ligne, il étudie chaque type de ligne et affiche le type que vous souhaitez, bref, il marche pour certain fichier, et pour d'autre, il oublie une ligne, enfin bref regarder par vous même...
J'ai tester en mettant des pauses partout, afficher les différentes valeurs de la ligne au cours du traitement, rien à faire, ma ligne se perd dans la mémoire :)

Le code est fait sous Dev C++, désolé, c'est que la structure...
Le fichier qui merde, c'est Ligne.cpp.
Donc ouvrer l'exe, ou compiler le 'like you want' et tester avec différents fichiers et explikez to me svp :p

ZIP : http://membres.lycos.fr/Joky/Scanner%20C++%20File.zip


void Aurevoir( void ); //Bonne journée

13 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 02:32
Les fautes j'men fou un peu, mais y'en a qui sont vraiment honteuses...
Ouvrer = Ouvrez...


void Aurevoir( void ); //Bonne journée
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 03:16
J'ai remarquer que le fichier Ligne.cpp merde à partir de la ligne 119...
Et je pense que c'est étroitement lier à la fonction TrouverProchainMot...


void Aurevoir( void ); //Bonne journée
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
25 juin 2005 à 11:45
'l'archive est d'un format corrompue...", windows nous tue bien avant ton code !
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 12:31
Lol en effet ça craint, j'pense pas qu'elle soit corrompue, c'est juste ton log qui télécharge... j'avais les mêmes problèmes avec DAP sur themexp.org fin bref, jvé tout mettre sans zip :)

http://membres.lycos.fr/Joky

Voir C++ ;)


void Aurevoir( void ); //Bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 12:38
Voila donc faut aller voir dans Scanner C++ ( Ebauche )
Et y'a les fichier nécessaire.


void Aurevoir( void ); //Bonne journée
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
25 juin 2005 à 12:48
salut,

oublie jamais un truc 'desfois il plante, desfois non' : ton code est
buggé, et comme ds 90% des cas c'est du a une mauvaise utilisation des
pointeurs.

primo : je sais pas si t'as fait du java avant, mais il semblerait que
t'aies pas compris certaints trucs : un char *Line = new char[512]; est
inutile !! car tu connais a la compilation la taille de ton tableau.
Ecris plutot : char Line [512]; ca te permettra de pas faire de
delete[] par la suite.

deuxio, ben des le main ca commence mal :

CLigne **cLigne;

*cLigne = new CLigne[NbrLigne-1];



exemple typique d'écriture dans une zone de mémoire non allouée ...

Fais plutot CLigne * cLigne = new CLigne[NbrLigne-1]; et ensuite
utilise &cLigne si tu veux un CLigne** ... La dans ce que tu fais
tu déclares un pointeur sur un pointeur de CLigne, et en faisant
*cLigne = ... tu écris dans ce qui est pointé par ton pointeur de
pointeur, mais pb, celui ci pointe vers qqc d'aléatoire a la base, et
en tout cas certainement pas vers une zone mémoire disponible. Qd ca
plante pas a cet endroit, c'est de la chance.

Tu peux egalement faire (mais la 1ere solution est meilleure ...)

CLigne **cLigne;

cLigne = new CLigne*;


*cLigne = new CLigne[NbrLigne-1];

mais la ca te permet peut etre de mieux comprendre pourquoi ce que t'as fait ne va pas.



ensuite un pb etant lié a la partie C de ton code, si tu fais

szLigne = new char[512];

strcpy(szLigne, szValue);

exemple typique de buffer overflow car tu ne controles pas la taille de
szValue ... N'utilises jamais strcpy, prefere la version sécurisée
strncpy ...

tu devrais avoir:

szLigne = new char[512];


strncpy(szLigne, szValue,512);

szLigne[512-1] = 0;

cela dis tu devrais avoir un char szLigne[512]; comme champs de ta classe, ca t'eviterait un new avec une taille fixe !!!



bon déja une correction de ces quelques pb vont peut etre t'éviter certains plantages ..

a+
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 12:53
Héhéhé merci :p pour toutes ses remarques, j'vé vite corrigé le bordel et j'dis quoi...
C'est vrai que les pointeurs lol c'est quand même ce qu'il y a de plus merdique :p

@tte de suite


void Aurevoir( void ); //Bonne journée
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
25 juin 2005 à 12:56
et controle la taille des tableau que tu manipules !!!!

ta fonction void CLigne::TrouverMotSuivant(char *c, char *Mot) est un exemple typique de non controle.

si tu veux pas t'emmerder ou que tu réussis pas a t'en sortir avec les
tableaux de char, fais du C++ justement et utilise les std::string ....
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 13:19
J'voudrais savoir si c'est correct ça lol xD

int NbrLigne = cFile.CompterLigne();
CLigne *cLigne[NbrLigne-1];
cLigne[0] = new CLigne(2, "David");
cLigne[0]->Afficher();
system("PAUSE");
delete cLigne;

donc on commence par compter les lignes..., on crée un tableau de pointeur qui ne point sur rien pour l'instant, et ensuite le premier élément on l'initialise... Normalement c'est bon la ??? :)


void Aurevoir( void ); //Bonne journée
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 13:20
delete[] cLigne plutot...


void Aurevoir( void ); //Bonne journée
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
25 juin 2005 à 13:49
ca, ca doit pas compiler : CLigne *cLigne[NbrLigne-1];

la taille du tableau doit etre connu a la compilation si tu fais qqc
comme ca (ca doit etre une constante quoi, la NbrLigne-1, au moment de
compiler, le compilo sait pas ce que ca vaut !)

du coup le reste est pas consistant, puisque tu écris cLigne[0] = new
CLigne(2, "David");, donc en fait cLigne est supposé ici etre un
CLigne** ...



utilise le type vector de la STL, t'auras plus de pb avec les tableaux ....

ce que tu fais est plus du C que du C++......

ex:

#include <vector>

vector<CLigne> cLigneArray;

cLigneArray.push_back( CLigne(2, "David") ); // ajout d'une CLigne au tableau

cLigneArray[0].Afficher();

etc...
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
25 juin 2005 à 13:56
enfin si tu utilises la STL, il faut que tes classes définissent proprement le constructeur par copie, et l'operateur de copie:

le CLigne& operator=(const CLigne& b); // operateur d'affectation

et CLigne::CLigne(const CLigne& b); // constructeur par copie



quand tu ne les définis pas, et que tu fais une allocation dynamique
dans le constructeur, tu peux facilement obtenir un plantage de ta
classe; essaie ca:



{

CLigne a;

CLigne b(a);

}

tu verras ca va planter :)

(lors de la destruction de b, il va essayer de faire un delete[]
szLigne; alors que la zone mémoire désignée par szLigne a déja été
désalloué lors de la destruction de a)

a+
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 juin 2005 à 14:01
Mon dieu lol c'est affreuxxxxxxxxxxxx
J'suis assez mal barré donc :p

Il est donc temps que j'm'intéresse à ces vecteur la j'sais pas trop quoi :p
En tout cas merci beaucoup de t'investir lol moi ca fait longtemp j'me serais casser :p


void Aurevoir( void ); //Bonne journée
0
Rejoignez-nous