[C++] Probleme d'exception / C++ Builder
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

[C++] Probleme d'exception / C++ Builder



  1. #1
    JP

    Bonjours,

    J'ai un petit probleme de débutant, une exeption, qui fait planter ma petite application.


    [code:1:2c0ccbd05c]while(!CheckBox9->Checked)
    {
    for(unsigned i=1; i!=0x80; i<<= 1)
    {
    Parallele1->WritePort(0x378,i) ;
    Sleep(100);
    }
    } [/code:1:2c0ccbd05c]


    Alors j'ai un peu cherché et j'ai vu qu'on pouvait empécher cette erreur en mettant un try - catch. Ce que j'ai essayé de faire:




    [code:1:2c0ccbd05c]while(!CheckBox9->Checked)
    {
    for(unsigned i=1; i!=0x80; i<<= 1)
    {
    try
    {
    Parallele1->WritePort(0x378,i) ;
    Sleep(100);
    }
    catch (...)
    {
    }

    }
    } [/code:1:2c0ccbd05c]

    Mais j'ai toujours le probleme de violation.

    Merci d'avance pour votre aide

    -----

  2. #2
    Mouquiette

    On peu avoir ton message d'erreur ?

  3. #3
    JP

    'le pojet bla bla bla a provoqué une classe d'exception EAccessViolation avce le message 'violation d'accès à l'adresse 010C1172.Ecriture de l'adresse 00000378' Processus stopé. Utilisez Pas-à-Pas ou Exécuter pour continuer."

    GetDefaultInterface()->WritePort(Address/*[in]*/, Data/*[in]*/);

    Et en Pas-à-Pas j'ai vu que cétait la fonction Parallele1->WritePort(0x378,i); qui crée l'exception lors de la premiere boucle quand i=1

    voila merci pour ta réponse

  4. #4
    Mouquiette

    Bon je te réponds, mais, j'ai jamais fait de C++, donc c'est peut etre pas ca.

    AccessViolation, ou segfault, c'est que tu essaye de lire ecrire à endroit qui n'est pas alloué dans la mémoire, et que le systeme d'exploitation t'en emepche.

    Donc à la vue de ton programme, je dirais que c'est l'adresse (0x378) qui est hors programme.

    Il me semble que le C++ (contrairement au Java) ne gere pas les segfault et plante méchament, mais bon c'est pas sur.

    Essaye de changer l'adresse, ou alors essaye un try{}catch(Exception e){} (Attention syntaxe Java, essaye de voir si il y a un equivalent, genre catchAll...).

    Une question comme ca, elle fait quoi la méthode WritePort(Adress, Data); ?

    Des pistes pour l'adresses : l'objet présent à cette adresse n'est pas définit, n'xiste pas, n'est pas a cette adresse.

  5. A voir en vidéo sur Futura
  6. #5
    JP

    Si je fais par exemple Parallele1->WritePort(0x378,255); ca marche sans probleme mais dès que je l'integre dans une boucle avec un variable j'ai droit à mon plantage.

    Pour le try{}catch(Exception e){} déjà essayé et ca plante toujours.

    Et sinon le 0X378 c'est l'adresse du port parallele.
    Et WritePort(Adress, Data); envoi simplement DATA sur les 8bits de sortie du port parallèle.

    Et ca for(unsigned i=1; i!=0x80; i<<= 1) c'est pour faire un chenillard avec des leds

    A+

  7. #6
    Mouquiette

    et t'as essayé de tracer l'exception ? (Afficher les détails).
    Sinon, un truc comme ca, essaye de faire un
    WritePort(0x378, 1), hors d'un for, est dans un for. Ne fait pas varier Data.
    Si ca marche pour aucun, ben il aime pas 1 comme Data (je vois pas pourquoi mais bon )
    Si ca marche pour un seul, c'est pas normal. Je vois pas ce qui peux merder.

    Si ca marche dans les deux cas, cela veux dire que "unsigned i", n'est pas le type qu'attents la fonction. Essaye un "int i"

    Mouquiette qui se rappelle de son chenillard fais en assembleur

  8. #7
    JP

    Tracer l'exception .... la je comprend pas... les détails ?
    Et donc WritePort(0x378, 1) hors du for ca marche dans le for marche plus.
    Et j'ai changé le type de variable en int marche pas plus.

    Mouquiette qui se rappelle de son chenillard fais en assembleur
    T'as raison je vais me remettre au microcontroleur beaucoup moin compliqué et le chenillard est torché en 10 min.

  9. #8
    Mouquiette

    Pour le trace de l'exception, il doit y avoir un fonction qui permet d'afficher en détail l'erreur.
    En Java c'est printStackTrace(e); Cela permet d'avoir pleins d'infos sur l'exception, le pourquoi ...

    Mais bon si ca marche pas dans le for, meme avec un Data constant, c'est assez étrange. Essaye dans un while(1) ou dans un if(1) pour voir.

  10. #9
    JP

    Ayé,

    Je sais pas comment ca ce fait mais j'ai copier le bloc dans une nouvelle application et ca marche.

    Encore un mystère de l'informatique

    A+

Discussions similaires

  1. Problème avec le Splash screen sous C++ Builder
    Par invite386d297b dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 06/06/2007, 19h00
  2. Probleme avec c++ builder 6
    Par invitef3627077 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 11/08/2005, 12h05
  3. Matlab - Builder C++ 5
    Par invite17e9c3d5 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 25/05/2005, 20h28
Découvrez nos comparatifs produits sur l'informatique et les technologies.