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++Builder Discussion :

beug sur mon PGM


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut beug sur mon PGM
    salut,

    voila je fais un TP et je dessine sur une image mais quand je clique sur dessiner ( j'ai bien sur mes fonctions ) je recois le message d'erreur suivant :

    " violation d'accés à l'adresse 0051BF24 dans le module TP.exe . lecture de l'adresse 467375C9 "

    et le pointeur vert (du pas à pas )s'arrete sur l'instruction suivante :

    TColor MyCol = Image->Canvas->Brush->Color;

    alors que dois etre le probleme d'aprés vous? es ce que les calculs sont mal faits, et es ce que si les coordonnés sont dehors de l'image peut provoquer ca!!

    je vous pris de me repondre le plus vite possible merci.

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    un peu plus de code serait le bienvenu
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut
    je ne sais pas quoi mettre car je ne sais pas quelle est la nature du probleme ( car le code est trés longs )

    j'ai une autre question , je veux initialiser mon image avec du blanc, donc g mis 2 images avec des pictures planches et j'ai fai ceci

    image1->picture=image2->picture;

    mais ca ne parche pas, alors help please!!

  4. #4
    Membre émérite Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Par défaut
    tu sais ou ton programme s'arrete alors fait une version minimal compile la et donne le code si ca plante

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    image1->picture=image2->picture;
    Dans ce cas, Picture est le même objet pour image1 et image2 (c'est une simple opération de pointeur et ne fait rien d'autre sauf peut-être de déclencher un bug lors de la destruction des objets...)

    Pour copier Picture dans un autre Picture, il faut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1->Picture->Assign(Image2->Picture);
    A plus !

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut
    g fais Assign et quand j'initialise ca beug "violation d'acces a l'adresse..."

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut
    j'ai une autre question aussi : quand je compile le link prend ennormement de temps juska 700 sec !!!

    comment faire pour reduire ce temps SVP ( sachant que sur une machine trés puissante c dans les 100sec et je trouve ca ennorme !! )

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Reste à savoir si Image1 et/ou Image2 n'ont pas été corrompues en amont et dans un premier temps ces images là ont-elles été parfaitement instanciées et chargées par un bitmap (ou autre).

    Ce bug est sans doute à raprocher de celui avec Brush... quelque chose a du être détruit...

    Bien vérifier ce que tu fais en amont !
    Qu'as tu fait avec Image1 et Image2 en amont de cette ligne (et plus globalement dans le programme) ?

    A plus !

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut
    Citation Envoyé par yesil08
    g fais Assign et quand j'initialise ca beug "violation d'acces a l'adresse..."
    pour ce pb c reglé j'arrive à initialiser ( g trouvé que image1 étée déclaré plusieurs fois..

    pour l'autre probleme je vais voir encore et je vous en dirais plus..

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut
    voici tte la fct son role c'est dessiner a partire de de point A et B une fleche

    vette structure vous aidera
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     struct etat1 { TPoint p;
                      int numero; };   //structure d'un sommet
    
    void DrawArrow(TPoint A, TPoint B,TImage *Image)
    {  
      int a = B.x - A.x;
    	int b = B.y - A.y;
    	int D = sqrt(a*a+b*b);
    
    	int c  =  a*A.y - b*A.x;
    	int c1 = -(a*A.x+b*A.y);
    
    	etat1 P, P2, Q, Q2, E, F;
    	if (a==0)  // DX
    	{
    		P.p.x = P2.p.x = A.x;
    		P.p.y = A.y + 0.5*D; P2.p.y = A.y - 0.5*D;
    		if(b<0){P=P2;};
    
    		Q.p.x = Q2.p.x = A.x;
    		Q.p.y = A.y + (0.5*D + 10); Q2.p.y = A.y - (0.5*D + 10);
    		if(b<0){Q=Q2;};
    
    		E.p.x = P.p.x -5; F.p.x = P.p.x+5;
    		E.p.y = F.p.y = P.p.y;
    	}
    	else
    	{
    		if (b==0)
    		{
    			P.p.y = P2.p.y = A.y;
    			P.p.x = A.x + 0.5*D; P2.p.x = A.x - 0.5*D;
    			if(a<0){P=P2;};
    
    			Q.p.y = Q2.p.y = A.y;
    			Q.p.x = A.x + (0.5*D + 10); Q2.p.x = A.x - (0.5*D + 10);
    			if(a<0){Q=Q2;};
    
    			E.p.y = P.p.y -5; F.p.y = P.p.y+5;
    			E.p.x = F.p.x = P.p.x;
    		}
    		else
    		{
    			Get_Two_Points(b, -a, c, c1, 0.5*D*D, &P, &P2);
    			Get_Two_Points(b, -a, c, c1, D*(0.5*D + 10), &Q, &Q2);
    			if(!((a>0)^(P2.p.x>A.x))){P=P2;};
    			if(!((a>0)^(Q2.p.x>A.x))){Q=Q2;};
    			int c2 = -(a*P.p.x+b*P.p.y);
    			Get_Two_Points(a, b, c2, -c,5*D, &E, &F);
    		}
    	}
    
    
    	TPoint *MyArrow = new TPoint[3];
    	MyArrow[0] = E.p;
    	MyArrow[1] = F.p;
    	MyArrow[2] = Q.p;
    
    ****	TColor MyCol = Image->Canvas->Brush->Color;
    
    //ca beug a ce niveau
    	int MyWidth = Image->Canvas->Pen->Width;
    	Image->Canvas->Pen->Width = 1;
    	Image->Canvas->Brush->Color = Image->Canvas->Pen->Color;
    	Image->Canvas->Polygon(MyArrow, 2);
    	Image->Canvas->Brush->Color = MyCol;
    	Image->Canvas->Pen->Width = MyWidth;
    
    	delete[] MyArrow;
    }
    penser a la balise code <#> DJmSoftware

  11. #11
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    pour mettre du code sur le forum! C'est plus facile à lire!

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    void DrawArrow(TPoint A, TPoint B,TImage *Image)
    Donc... l'appel est-il effectué corretement avec un TImage* passé en paramètre ?
    Parce que il y a intérêt à ce qu'il y ait une image au bout du pointeur !

    A plus !

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut
    pour l'image elle passe correctement , j'ai fais ceci

    Image->Visible=false;
    ShowMessage("c bon!");

    au debut de la fonction et l'image est devenu invisble et j'ai eu le msg donc c bon!

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Par défaut
    alors si Image passe correctement que peut etre l'erreur svp!!

  15. #15
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour,
    dans le code envoyé tu ne teste jamais si le pointeur image est valide
    c'est assez risquer
    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
     
    ****	TColor MyCol = Image->Canvas->Brush->Color;
     
    //ca beug a ce niveau
    	int MyWidth = Image->Canvas->Pen->Width;
    	Image->Canvas->Pen->Width = 1;
    // un petit test serait le bienvenu
     
    if (Image)
    {
       // ton code
    }
     
     
    // le meilleure en programation est d'utiliser des blocs d'exceptions
     
    try
    {
     
      TColor MyCol = Image->Canvas->Brush->Color;
      int MyWidth = Image->Canvas->Pen->Width;
      Image->Canvas->Pen->Width = 1;
    }
    catch (Exception &E)
    {
      ShowMessage(E.MEssage)
      // ton traitement de l'exeception
    }
     
    }
    je te prie par ailleurs de modifier l'intituler de ton post , il ne s'agit pas d'un bug sur BCB6, mais d'une erreur de programmation courante de type AccessViolation

    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  16. #16
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Je pense qu'il y une corruption de la pile.

    Pour faire simple, il faudrait (je pense) sortir toutes les variables locales de la fonction, en particulier les objets qui sont passés comme paramètre à la fonction Get_Two_Points sous forme d'adresses au niveau de la pile (je ne sais pas si c'est recommandé... pour une question d'ordre dans l'empilement des éléments qui pourrait éventuellement ne plus être le même vu par un pointeur ... ça me titille un peu ici !), et les déclarer en global.
    Puis tester...

    Sinon décrypter chaque ligne pour voir ce que l'on y fait !

    Vérifier quand même ce que fait exactement la fonction Get_Two_Points... au niveau des paramètres en vérifiant s'ils sont bien valides !

    A plus !

Discussions similaires

  1. Booter sur mon deuxieme disque
    Par Slein dans le forum Administration système
    Réponses: 2
    Dernier message: 25/06/2004, 15h16
  2. Réponses: 2
    Dernier message: 14/05/2004, 12h55
  3. Réponses: 3
    Dernier message: 01/02/2004, 21h24
  4. Paramétrer le nombre de connexion sur mon serveur Mysql
    Par Zerga dans le forum Installation
    Réponses: 2
    Dernier message: 12/12/2003, 19h21

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