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

Lazarus Pascal Discussion :

SIGSEGV inopportun et incompréhensible sur ShowMessage [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 049
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 049
    Points : 14 488
    Points
    14 488
    Par défaut SIGSEGV inopportun et incompréhensible sur ShowMessage
    Bonjour,

    de bon matin, un truc hallucinant : soit une bête fonction qui commence par initialiser des trucs et des machins, puis qui continue par un calcul et enfin qui affiche son résultat avec un ShowMessage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      val_indice := calcule_IndiceC(aCol);
    //  ShowMessage(IntToStr(val_indice));
      i := 70;
      ShowMessage(IntToStr(i));
    Et la fonction se termine ensuite avec un Result := paramètre_passé_en_entrée_et_pas_encore_trafiqué : c'est juste du test pour le moment.

    Comment est-il possible, alors que la valeur du calcul est bonne en pas-à-pas, que ShowMessage me balance un insultant
    Le projet project1 a levé une exception de class "External: SIGSEGV".

    à l'adresse 8060481

    Pour ne pas mourir idiot, j'ai remplacé ce ShowMessage par un autre, le "i" en question étant le résultat d'une boucle effectuée juste avant l'appel du calcul et non présentée ici parce que, franchement, for i := 0 to unevaleur do qqchse; ne présente pas un grand intérêt.
    Mais le truc loufoque c'est que le SIGSEGV apparaît alors sur le ShowMessage du "i".

    Sachant que ce SIGSEGV correspond à quelque chose de non assigné ou similaire, je ne comprends pas pourquoi j'ai ça sur le "i", surtout qu'en désespoir de cause j'ai rajouté i := 70; (pourquoi pas 70 ?) juste avant son ShowMessage et que ça se vautre tout autant...

    Si quelqu'un a une idée...

  2. #2
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 65
    Points : 133
    Points
    133
    Par défaut SIGSEGV
    Bonjour,
    A mon avis,tu as un debordement dans cette ligne.
    val_indice := calcule_IndiceC(aCol);

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Salut JP,

    Comme l'a souligné microb, le problème ne peut venir que de ta fonction calcule_IndiceC.

    Peux-tu nous montrer le code de cette fonction ?

    Amicalement
    Thierry

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 049
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 049
    Points : 14 488
    Points
    14 488
    Par défaut
    Yep !
    Citation Envoyé par ThWilliam Voir le message
    Salut JP,

    Comme l'a souligné microb, le problème ne peut venir que de ta fonction calcule_IndiceC.
    Moui...
    Sauf que je viens de la commenter, juste avant de vous répondre, et bien sûr le canard est toujours vivant...
    J'aurais dû aller habiter dans les Landes, tiens !

    Citation Envoyé par ThWilliam Voir le message
    Peux-tu nous montrer le code de cette fonction ?
    Mais bien sûr !
    Le groupe des 3 lignes de commentaires qui se suivent n'est pas de moi mais de l'auteur de l'idée, que je pense avoir bien mise en œuvre :
    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
      function calcule_IndiceC(CellCol: TColor):byte;
      var
        rl,gl,bl, maxcol: byte;
      begin
        // la couleur passée correspond au fond de la cellule
        ColorToRGB(CellCol, rl,gl,bl);
        //L'entier IndiceC est un pilote qui peut prendre l'une des 3 valeurs (1, 2, 3)
        //selon la couleur (Rouge, Vert, ou Bleu) du coin supérieur gauche (Csg);
        // et si 2 valeurs identiques, prendre celle "en face", ie 255 255 0 --> 0 0 255 (bleu est "en face" du jaune),
        maxcol := max(rl, max(gl, bl));
        if (maxcol = rl) and (gl < rl) and (bl < rl) then begin Result := 1; exit; end;
        if (maxcol = gl) and (rl < gl) and (bl < gl) then begin Result := 2; exit; end;
        if (maxcol = bl) and (rl < bl) and (gl < bl) then begin Result := 3; exit; end;
        // on n'est pas sorti ? Il y a des valeurs identiques, alors...
        if (rl = gl) then begin Result := 3; exit; end; // couleur opposée a dit wiwaxia
        if (rl = bl) then begin Result := 2; exit; end;
        if (bl = gl) then begin Result := 1; exit; end;
        // et si rl = gl = bl ? Si = 0 -> noir, = 255 -> blanc, entre -> gris
        // pas des couleurs, ça
      end;
    Merci pour ces premiers retours, mais ne vous prenez pas trop la tête avec ça, le souci a l'air de venir d'ailleurs : si je commente ce qui le précède, le ShowMessage fonctionne correctement et c'est après lui que ça merdouille...

    Avant il y avait un bouton "Délestage" pour les posts stupides qui n'ont pas lieu d'être, mais ça fait bien longtemps qu'il a disparu.

  5. #5
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Juste 2 remarques dans ta fonction :

    1) ColorToRGB est dans ma version Lazarus(1.6 win) une fonction retournant un longint (unit graphics) !!?

    2) Si les 3 valeurs rl, gl, bl sont égales (gris), tu auras toujours un result = 3 (peu importe la valeur 0..255). Est-ce voulu ?

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 049
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 049
    Points : 14 488
    Points
    14 488
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Juste 2 remarques dans ta fonction :

    1) ColorToRGB est dans ma version Lazarus(1.6 win) une fonction retournant un longint (unit graphics) !!?
    Beau coup d'œil !

    C'est une autre fonction de Graphics (RedGreenBlue), extraite et renommée à ma sauce pour être en phase avec d'autres que j'utilise intensément (ColorToHSL, etc.), plus déclaration "inline".
    J'aurais pu le préciser, mais je pensais que le nom suffirait pour comprendre ce qu'elle faisait.

    Citation Envoyé par ThWilliam Voir le message
    2) Si les 3 valeurs rl, gl, bl sont égales (gris), tu auras toujours un result = 3 (peu importe la valeur 0..255). Est-ce voulu ?
    Je ne sais pas, c'est pour donner à manger à une boîte noire dont je n'ai pas encore compris à quoi elle servait et comment elle fonctionnait...
    On verra quand on y sera, si on y arrive.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/05/2007, 18h57
  2. incompréhension sur SUBSTR
    Par awalter1 dans le forum Oracle
    Réponses: 1
    Dernier message: 10/05/2007, 14h13
  3. [Fonction][VBA]incompréhension sur datediff
    Par portecd dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/04/2007, 14h57
  4. [JRE] Erreur incompréhensible sur solaris
    Par Yoops dans le forum Langage
    Réponses: 1
    Dernier message: 31/05/2006, 15h39
  5. incompréhension sur l'utilisation des sessions
    Par cladsam dans le forum Langage
    Réponses: 12
    Dernier message: 31/01/2006, 13h28

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