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 :

Souci avec fenetre C++


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut Souci avec fenetre C++
    Bonjour,

    Un souci concernant la mise en place d’un software, il me parle de C++ et je n’y connais rien ?

    J’ai acheté un software sur le site : http://www.datadoctor.org/

    De là on m’a donné un lien pour le telecharger, pas de problèmes, je l‘ai installé, il fonctionnait bien, mais comme j’avais mal rentré des donnés, j'ai voulu le désinstaller ( sous XP avec Ajout/supression des programmes) et cela je l’ai fait 2 fois.

    Resultat des courses, lorsque je clic maintenant sur le raccourci, j’ai la fenêtre suivante :


    Microsoft Visual C++ Debug Library

    Debug Assertion Failed!
    Program: ...ta Doctor Ba, Link Checker\Data Doctor Ba, Link Checker.exe
    File: fgets.c
    Line: 60
    Expression: str != NULL
    For information on how your program can cause an assertion
    falure, see the visual C++ docimentation on asserts
    (Press Retry to debug the application)


    ET impossible d’aller plus loin.

    Pourtant je l’ai installé sans problème sur un autre ordinateur après ?

    Dans quelle direction aller pour résoudre cela ?

    Merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Le mieux est encore de contacter l'éditeur pour lui signaler ton problème. Ici, cela concerne plus les problèmes de développement. Et visiblement, tu as installé/désinstallé puis réinstallé un soft ... qui visiblement a un bug. L'éditeur est encore le mieux placer pour t'aider.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut
    Merci pour la réponse.
    C'est pas des Français qui gèrent cela.

    Je leur ai envoyé un mail avec le probleme.. s'ils répondent.. dur..dur.

    L'anglais c'est pas mon point fort.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 113
    Billets dans le blog
    147
    Par défaut
    Ça ne choque personne d'entendre parler d'un logiciel vendu en version DEBUG ?
    Car les assertions c'est qu'en DEBUG, je me trompe?

    Enfin bref, moi j'apporte pas la solution au problème donc je peux me coucher :s
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par LittleWhite Voir le message
    Ça ne choque personne d'entendre parler d'un logiciel vendu en version DEBUG ?
    Car les assertions c'est qu'en DEBUG, je me trompe?

    Enfin bref, moi j'apporte pas la solution au problème donc je peux me coucher :s
    Ce n'est pas aussi net que cela...

    On trouve, effectivement, beaucoup d'assertion dans la version debug, mais, d'un autre coté, dans le cadre d'un développement utilisant la programmation par contrat, il y a quelque chose d'illogique à désactiver les assertions dans la version release.

    En effet, il est souvent préférable dans un tel contexte de faire en sorte qu'une assertion non respectée provoque l'arrêt pur et simple de l'application (voire d'autres actions particulières) car ce n'est pas forcément parce que le contrat était respecté durant toute la période de tests qu'il se sera encore forcément lorsque l'utilisateur posera se "sales mains pleines de doigts" sur l'application
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 113
    Billets dans le blog
    147
    Par défaut
    Citation Envoyé par koala01 Voir le message
    En effet, il est souvent préférable dans un tel contexte de faire en sorte qu'une assertion non respectée provoque l'arrêt pur et simple de l'application (voire d'autres actions particulières) car ce n'est pas forcément parce que le contrat était respecté durant toute la période de tests qu'il se sera encore forcément lorsque l'utilisateur posera se "sales mains pleines de doigts" sur l'application
    Ah! Vous évoquez parfaitement une des questions récentes que je me posais ( d'ailleurs, faudra que je demande l'avis sur le forum bientot )

    Mais finalement, dans l'utilisation actuelle que j'ai de l'assertion, c'est plus de la sécurité pour voir si le programmeur en lui même ne fait pas des erreurs de codage ( genre je passe NULL à une fonction ). Comme ça, au lieu d'avoir un bug qui se signalera de manière très aléatoirement, je n'aurais qu'un assert à plus tot.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Ah! Vous évoquez parfaitement une des questions récentes que je me posais ( d'ailleurs, faudra que je demande l'avis sur le forum bientot )

    Mais finalement, dans l'utilisation actuelle que j'ai de l'assertion, c'est plus de la sécurité pour voir si le programmeur en lui même ne fait pas des erreurs de codage ( genre je passe NULL à une fonction ). Comme ça, au lieu d'avoir un bug qui se signalera de manière très aléatoirement, je n'aurais qu'un assert à plus tot.
    Attention quand même, ce que j'ai écrit reste à prendre "avec des pincettes"

    En effet, il y a beaucoup de contextes à prendre en compte pour déterminer si une assertion doit être ou non prise en compte dans la version release et, surtout, pour déterminer le meilleur moyen de la prendre en compte.

    Tu prend l'exemple d'un pointeur ne pouvant être nul, et c'est, justement l'exemple qui peut s'avérer le plus marquant:

    Posons nous d'abord la question de savoir ce qui peut, en version release, provoquer le fait de passer un pointeur nul

    Ce peut être une erreur de logique, qui aurait du être remarquée en période de test, et la condition n'a, a priori (et pour autant que la batterie de tests soit correcte) pas vraiment à être testée en mode release.

    Par contre, le pointeur peut être nul parce que... l'allocation de la ressource a échoué...

    Dans ce cas, le contrat est également rompu, mais j'ai presque envie de dire que seules les circonstances sont responsables de cette rupture de contrat...

    Tout le problème vient du fait que l'application ne peut absolument pas avoir à elle seule la responsabilité de prendre les mesures nécessaires pour donner l'assurance que le contrat sera respecté en cas de nouvelle tentative:

    Elle peut essayer de libérer des ressources dont elle n'a plus besoin, mais ca peut être insuffisant et, dans le pire des cas, si la ressource n'a pas pu être allouée, c'est parce qu'une autre ressource la monopolise voire, suite à une restriction des droits de la part du système d'exploitation...

    Dans le premier cas, (l'application tente elle-même de libérer des ressources dont elle est responsable), il faut espérer que cette libération de ressources sera suffisante, autrement, il faudra bien en arriver à quitter d'une manière ou d'une autre l'application.

    Dans les autres cas (si une applications monopolise la ressource ou si la ressource est inaccessible suite à une limitation du système d'exploitation), l'application devra être quittée après avoir affiché un message d'erreur...

    Oui, mais, si tu travailles en embarqué, tu n'aura pas forcément la possibilité d'afficher ce message d'erreur, et les actions à entreprendre seront donc différentes

    C'est pour cela que j'estime (parce que j'ai lu un article qui me l'a soufflé, je l'avoue) que, dans la programmation par contrat, les assertions devraient effectivement rester actives dans la version release, même si les actions prises avant de quitter l'application doivent être adaptées à la destination sur laquelle l'application devra tourner
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 113
    Billets dans le blog
    147
    Par défaut
    Je suis à peu près en accord avec vous, mais pour moi, le NULL à cause d'un manque de mémoire doit être géré avant de commencer d'envoyer le pointeur un peu partout dans le reste duy programme. Donc, comme ce cas, je le gère ... je me dis que mon assert(pointeur!=NULL), et bah il ne va traiter que les erreurs du programmeur.

    Car le cas ou pointeur est NULL serait s'il envoyer un pointeur, qu'il n'a jamais essayé d'allouer ( pour peu qu'il est la bonne habitude de donnée une valeur immediatement à la déclaration ) ou alors le pointeur à été désallouer ( pour peu qu'il remette à NULL le pointeur ).

    Bien sur, je ne travaille pas sur les "énormes" ( dans la façon de géré ) cas des systèmes embarquer, ou des UI complexes ou il faut sauver les données des utilisateurs avant de tout quitter. Je pense que j'ai encore de la chance dans ma vie de programmeur.

    De plus, dites moi si je me trompe, mais les asserts, une fois que le programme à trouver que la condition n'a pas été respecté, il stoppe le programme et ne libère rien ?
    Donc dans le cas ou on laisse l'assert en Release il faut faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( b_assert == false )
     // Liberation
    assert(b_assert);
    Par exemple ... pour moi c'est un peu redondant :s

    Pardon pour le gros hors sujet que j'ai installé :s
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    L'assertion de base appelle, si je me souviens bien, la fonction exit() qui elle-même invoque la fonction at_exit()

    Et il me semble que la fonction at_exit() purge la pile, mais je crains de dire une bêtise sur ce point.

    Quoi qu'il en soit, comme l'application rend la main au système d'exploitation juste après, on peut plus ou moins estimer qu'il fera correctement son travail en récupérant la mémoire allouée dynamiquement par l'application (car le problème ne se pose pas pour toutes les variables déclarées sur la pile )

    Ceci dit, le phénomène est sensiblement identique à celui qui survient lorsqu'une exception est lancée et n'a pas été récupérée dans la fonction main, à ceci près qu'il ne donne pas l'occasion aux fonctions appelantes d'attraper l'exception: c'est le direct vers la sortie au lieu d'être potentiellement un omnibus
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Je suis d'accord avec LittleWhite: Ce n'est pas aux assertions de gérer un échec d'allocation. Si l'on veut qu'un échec d'allocation détourne le flux du programme, c'est plus une exception qu'il faut utiliser.
    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.

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 113
    Billets dans le blog
    147
    Par défaut
    Un moment j'aimais bien at_exit.

    Jusqu'au jour, ou je me suis rendu compte, que pour faire un truc bien ( avec at_exit ) il fallait tout mettre en globale, pour faire une libération saine à chaque fois.

    Par contre, maintenant je suis plus dans un système ou j'utilise un singleton, et la classe singleton "World" a une liste de tous les pointeurs ( car toutes les classes hérite de Object ) et que Object à sa construction, ajoute son pointeur dans World.
    Et là, je n'ai plus qu'a detruire mon singleton ... et normalement j'évite toute fuite ...

    Mais pour recentrer un peu, l'assertion doit être juste une aide pour le debugguage , et pour moi doit rester qu'en Debug. Si on veut avoir des retour sur les bugs engendré par un utilisateur, on utilise un système de verbose qui permet de faire des traces utile du programme.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    En fait, le terme assertion signifie, de manière générale "qui est sensée être vrai"...

    Je sais bien qu'une assertion en informatique est souvent considérée comme une aide au débuggage, mais, comme je l'ai indiqué, il n'est pas impossible de prévoir un système qui, en mode debug, fonctionne comme la macro assert et qui, en mode release, lance une exception

    Comme je l'ai fait valoir plus haut, si tu désactive l'assertion en mode release, tu peux avoir des surprises si, pour une raison ou une autre, tu es en rupture de contrat alors que, durant toute la période de test, cela ne t'est jamais arrivé.

    A ce titre, l'assertion est, effectivement, une aide au débuggage, mais elle doit faire partie intégrante de ta politique de contrat également en mode release
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Souci avec fenetre modale
    Par savanah66 dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 06/05/2013, 00h20
  2. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  3. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  4. [Kylix] Projet avec fenetre marche pas
    Par Therich dans le forum EDI
    Réponses: 1
    Dernier message: 11/07/2003, 12h34
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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