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 :

Un programme qui veut bosser; mais pas trop.


Sujet :

C++

  1. #1
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut Un programme qui veut bosser; mais pas trop.
    Salut les experts C++ !

    Voilà un comportement rigolo que je voudrais que vous m'expliquiez:
    Mon programme marche pour un petit nombre mais pas pour un grand....


    Je definis un objet (monobjet) d'un type (montype) que j'ai créé et lorsque j'appelle une méthode (mamethode) de cet objet, il refuse de commencer la méthode si un grand nombre a été choisi.
    tete est un pointeur sur les objets de type montype qui forment une "pile" FIFO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
     montype monobjet;
     if (tete!=NULL)
     	{
         monobjet.mamethode(*tete); //ligne de plantage
     	};
    };
    Ce bloc plante evidemment car, comme un boulet, g omis de définir le constructeur de copie. G donc définis le constructeur de copie et g remplacer l'appel de fonction par valeur par un appel de fonction par référence/pointeur (supposé moins lourd).

    Rien y fait. plantage à la meme ligne.

    J'ajoute enfin que:
    • Il n'y a pas de dépassement de capacité
    • Les objets de la pile ne renvoient jamais NULL lors de leur "new", donc pas de pb d'allocation mémoire.
    • La pile a une taille dépendante du nombre choisi au début.
    • J'utilise Borland C++ 5.0 (vieux et efficace) et c un prog win32 en mode console.


    Pkoi refuse t il de travailler pour des grands nombres, alors que le prog a l'air dimensionné pour y arriver ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Qu'est-ce que tu appelles "Planter" exactement ?

    On peut voir ta "pile" ? Pour moi une pile est LIFO et une file est FIFO...
    Et ce serait intéressant aussi si on pouvait voir ce que fait MaMéthode...
    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.

  3. #3
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Si tu nous livre 2 lignes, cela va être dur de t'aider...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    je ne vois pas dans l'exemple que tu donnes où est (était) la nécessité d'implémenter un constructeur par copie.

    par ailleurs dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (tete!=NULL)
    {
        monobjet.mamethode(*tete);
    }
    tester la condition tete == NULL ne suffit pas à blinder l'indirection ; si tete pointe sur une zone mémoire non allouée ... boum !

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    MERCI DE VOS REPONSES!
    Citation Envoyé par Médinoc
    Qu'est-ce que tu appelles "Planter" exactement ?
    Tu connais. C le moment si particulier ou l'ordi arrete de bosser pasque ya un truc qu'il sait pas faire
    Citation Envoyé par rigobert
    je ne vois pas dans l'exemple que tu donnes où est (était) la nécessité d'implémenter un constructeur par copie.
    Et bien, il faut noter qu'un passage par valeur d'une aggrégation (struct, class ...), nécessite un constructeur de copie. Une fois qu'on remplace par un appel par référence/pointeur, il n'y a plus ce pb.

    NE CHERCHEZ PLUS!

    C t simplement un dépassement de pile système. J'appelais trop de fonctions par une recursivité malsaine. Je n'y croyais pas car il ne me l'a pas noté comme tel. Voila pkoi le point ou il s'arretait etait si bizarre (avant de rentrer dans la fonction).

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et voilà pourquoi C++ Builder 5.0 est trop vieux pour faire du C++ aussi.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Qu'est-ce que tu appelles "Planter" exactement ?
    Tu connais. C le moment si particulier ou l'ordi arrete de bosser pasque ya un truc qu'il sait pas faire
    Ben non. ça peut être :
    • Erreur de compilation (oui, il y a des débutants qui appellent ça "planter");
    • Erreur d'édition de liens;
    • Windows refuse d'exécuter le programme, erreur de DLL, etc.
    • Erreur d'exécution, signalée par un message "segfault" ou une boîte de dialogue de rapport d'erreur;
    • Erreur d'éxécution non-signalée (fin brutale du programme). Par exemple, un débordement de pile sous Windows hors-debugger;
    • Une fonction retourne une valeur d'erreur, ou affiche un message d'erreur, sans que le programme fasse une erreur d'exécution (celui-ci se termine "normalement").
      • La variante sans message d'erreur, c'est que le programme fait un truc, mais pas ce qu'on attend de lui (affichage d'un résultat incorrect, etc.).
    • Boucle infinie dans le programme;
    • Gel généralisé de l'ordinateur;
    • Écran bleu de la mort;
    • Reboot.

    Tu vois, autant de possibilités derrière un simple mot...

    Edit: Et quelques possibilités en plus.
    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.

  8. #8
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Miles
    Et voilà pourquoi C++ Builder 5.0 est trop vieux pour faire du C++ aussi.
    ? On peut parfaitement faire du C++ avec C++ Builder 5.0
    Même Turbo C++ 3.0 sous ms-dos permettait tous les méchanismes de POO ( héritage etc...)

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    D'accord, mais le standard a évolué depuis.

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

Discussions similaires

  1. [AJAX] Script qui plante IE mais pas Firefox
    Par Booyakha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/05/2006, 18h40
  2. Réponses: 8
    Dernier message: 08/05/2006, 20h40
  3. [débutant mais pas trop] conversion string->entier
    Par Biosox dans le forum Débuter
    Réponses: 5
    Dernier message: 06/01/2006, 22h41
  4. Programme fonctionnant sur Eclipse mais pas avec le jar?
    Par kirik dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 10/02/2004, 13h43

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