IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Bug sur appli client/serveur


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Par défaut Bug sur appli client/serveur
    Iop à tous!



    Voila le blème (généralement quand je poste ici, c'est que j'en ai un, snif):

    J'ai une appli client/serveur en c/c++ sur windows. Un client ayant une fenêtre faite avec wxWidgets (mais le pb n'est pas là, du coup j'ai pas posté dans le forum dédié), et le serveur a une simple interface console. Le but est de permettre une gestion de fichiers, processus, etc. distantes sur le serveur. Jusque là, tout marchait impec' (plus ou moins proprement codé), mais maintenant, après avoir ajouté une fonctionnalité permettant d'envoyer un "statut", le serveur crashe, et pas forcément toujours au même endroit...

    Par exemple, il me suffit d'uploader 3 fois un fichier pour que le serveur plante. Parfois, il me suffit simplement de demander de changer de répertoire 2 fois sur le serveur, et ça plante aussi.

    Forcément, je me suis dit "t'as encore codé salement, et zappé des delete partout...", sauf que voila, quand j'ai voulu rajouter des delete où j'en avais oublié, ben y'en a qui font purement et simplement planter mon appli... Exemple:

    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
    59
     
     
            int x=0; //un entier
    	if(bl) x=1; //si bl est a true, 1
     
    	int pwdX=0;  //entier
    	if(pwd) pwd=1; //si password est a true, 1
     
    	char* p1=new char(10);  //quelques char* temporaires, avec un peu de marge
    	char* p2=new char(10);
    	char* p3=new char(10);
    	char* p4=new char(10);
    	char* p6; 
     
    	//pour avoir mon password dans un char * (a la base, password est un tableau de char[32]
    	p6=new char(32);
     
    	for(int i=0; i<32; i++) p6[i]=password[i];
           //conversions de certaines donnees
    	_itoa(port, p1, 10);
    	_itoa(pwdX, p2,10);
    	_itoa(x, p3, 10);
    	_itoa(port2, p4, 10);
     
    	//on fait une chaine, d'où les char* nécessaires pour string(char*)
     
    	string infos=string(p1);
     
    		infos=infos+" "+string(p2);
     
    		infos=infos+" "+string(p6);
     
    		infos=infos+" "+string(p4);
     
    		infos=infos+" "+string(pathINIT);
     
    		infos=infos+" "+string(p3);
     
    		infos=infos+" "+heurDeb; //ce sont des string, ici
     
    		infos=infos+" "+heurFin;
     
    		infos=infos+" "+process;
     
     
         //permet de placer ma string dans un buffer pour envoyer
    	parseStr(infos,2);
     
    	//envoi
    	envoyer();
    	//deletes que j'ai rajouté
    	delete p1;
    	delete p2;
    	delete p3;
    	delete p4;
    	cout<<p6<<" "<<&p6<<endl;   //me retourne bien un résultat cohérent!
    	//delete [] p6;                       //ou delete p6; font planter l'appli!!!
    	cout<<"oi!"<<endl;  //ne s'affiche pas si le delete est présent
     	return 0;

    C'est un simple exemple qui devrait (je crois) fonctionner! Et qui plante des que je fais un delete sur p6... En gros j'obtiens un rapport d'erreur, avec, en grattant un peu, une "exception 0xc0000005".

    Dans le second cas (plante au bout de 2 ou 3 uploads de fichiers), la ligne faisant planter le tout est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fichier(url, ios::out | ios::trunc);
    Sachant que url vaut "test.txt", et que je suis bien positionné dans le bon répertoire (vu que ça plante 2 fois de suite, et que j'affiche le répertoire courant avant...).


    Voila, j'imagine que c'est un problème de mémoire, vu que ça plante à différents endroits (qui n'ont a priori pas de liens...), mais je préfère être sur... Toujours est-il que c'est un vrai casse-tête!!! Je sais que je code pas toujours très proprement (mon 1er exemple le montre bien), mais je doute que ça vienne quand même de là!



    Merci d'avance à ceux qui auront le courage de se pencher sur la question .

    Bonne journée (soirée? matinée?)!

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ton problème semble plus venir du c++ que du réseau. Il faudrait que tu demandes à un admin de le changer de place.

    Sinon, tu alloue sans arrêt des tableaux de caractères de taille fixe : tu te compliques la vie pour rien.

    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char * p1 = new char [10];
    ...
    delete []p1
    Écris tout simplement et vois ce que ça donne.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Le bug lui-même, c'est surtout que strayyy allouait un caractère initialisé à la valeur 10 plutôt que d'allouer 10 caractères...

    Confusion entre les parenthèses et les crochets.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Le bug lui-même, c'est surtout que strayyy allouait un caractère initialisé à la valeur 10 plutôt que d'allouer 10 caractères...

    Confusion entre les parenthèses et les crochets.


    Okay, ben tout venait de là (zarbe quand même que ça plantait pas avant...).

    Merci (j'aurais même pas capté le problème tout seul... c'est grave)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/05/2011, 11h51
  2. [Debutant]Conseils sur developement appli Client/Serveur
    Par ahage4x4 dans le forum Général Java
    Réponses: 7
    Dernier message: 21/03/2006, 10h46
  3. [Architecture] Conseil pour développement appli Client/Serveur
    Par etiennegaloup dans le forum Développement Web en Java
    Réponses: 11
    Dernier message: 22/01/2006, 11h44
  4. méthode de cryptage, appli client/serveur
    Par sir_gcc dans le forum Développement
    Réponses: 1
    Dernier message: 14/09/2005, 12h13
  5. Protocole spécifique pour une appli client/serveur
    Par SteelBox dans le forum Développement
    Réponses: 2
    Dernier message: 17/12/2004, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo