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 éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 264
    Points : 13 524
    Points
    13 524
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    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...

  3. #3
    Membre émérite
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    Si tu nous livre 2 lignes, cela va être dur de t'aider...

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    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 éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 264
    Points : 13 524
    Points
    13 524
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

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

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    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.

  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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    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