Bonjour,

J'ai des comportement bizarres avec gcc. Cette fonction récupère la position de la souris pour faire un zoom sur une partie de la fractale de Mandelbrot.

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
 
void WMyFrame::OnMouseDown(wxMouseEvent& evt)
{
    double x = (evt.m_x - iCX) / iLarg * 4.0 * dEchX;
    double y = (evt.m_y - iCY) / iHaut * 4.0 * dEchY;
    complex<double> cb(0.0, 0.0);
 
    ca += complex<double>((evt.m_x - iCX) / iLarg * 4.0 * dEchX,
                          (evt.m_y - iCY) / iHaut * 4.0 * dEchY);
    cb += complex<double>(x, y);
    iCX = int(evt.m_x * dEchX);
    iCY = int(evt.m_y * dEchY);
    dEchX *= 0.20;
    dEchY *= 0.20;
    wxClientDC dc(this);
    Mandel(dc);
}
Il y a redondance avec x et y pour mieux expliciter le problème.
La compilation se fait sans erreurs ni warnings (flag -Wall).

Avec un breakpoint sur l'appel à Mandel(dc), voici le contenu de la fenêtre watch du debugger gdb 6.3.

Variables locales
x = 9.910199999999997
y = 9.910199999999997
cb_M_value = 0.0I

Variable membres de WMyFrame
dEchX = 0.2
dEchY = 0.2
ICX = 169
iCY = 129
iLarg = 400
iHaut = 400
ca_M_value = 0.0I

En fait on constate que ni x ni y ne sont calculés ils devraient être à -0.51 et -0.71 respectivement compte tenu des valeurs de evt.m_x et evt.m_y.
Parfois ils sont déclarés inconnus dans ce scoop !

Les complexes ca et cb (initialisés à (0.0, 0.0i)) restent à 0.

Les autres variables membres sont correctes.

Je n'y comprends rien ! Il arrive également que dans d'autres fonctions membres de WMyFrame, des variables locales soient déclarées inconnues dans ce scoop par le gdb.
Les variables membres sont toujours reconnues, mais pas toujours calculées comme ici avec le complexe ca.

Si quelqu'un a une réponse ou un conseil je le remercie par avance

JP51