Bonjour,
Je ne savais vraiment où mettre cette discussion...

J'ai codé une gui à la main.
dans cette gui, il y a une figure et deux boutons.
Le bouton 'b1' appelle une fonction 'fct_1' et 'b2' appelant 'fct_2'.

Mon problème :
je clique sur le 'b1' : très bien,
puis je clique sur 'b2' : toujours très bien.
je clique de nouveau sur 'b1' : ça plante.

Voila, une partie du code (c'est dans un même fichier) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
function MonInterface
	%figure
	%bouton 'b1' avec callback sur 'fct_1'
	%bouton 'b2' avec callback sur 'fct_2'
 
	data = guihandles (gcf);
 
	data.h = 0;
 
	guidata(gcf, data);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
function fct_1 (obj, evt)
    data = guidata(gcbf);
    % traitements
    % nécessite l'appel de fct_2
    guidata(gcbf, data);
        disp(data.h); % 26.005
    fct_2;
        disp(data.h); % 26.005
    guidata(gcbf, data);
        disp(data.h); % 26.005
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
function fct_2 (obj, evt)
    data = guidata(gcbf);
    % traitements
        disp(data.h); % 26.005
    % destruction data.h
    % création data.h
	disp(data.h); % 26.0051
    guidata(gcbf, data);
        disp(data.h); % 26.0051
Mes tests m'ont mené à supprimer la ligne 9 de la fonction fct_1 : ça ne plante plus.

Question 1 :
Pourquoi la data de la fonction fct_1 contient elle une ancienne valeur pour le handler 'h', alors qu'elle est mise à jour dans fct_2 ?
Question 2 :
Pour ne pas mettre une ancienne valeur du handler 'h', je ne termine pas la fonction par une sauvegarde de la data.
Est il grave si fct_1 ne se termine pas par une sauvegarde de la data ?

Je vous remercie pour vos réponses