Tableau dynamique

SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 28 déc. 2005 à 20:45
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 - 29 déc. 2005 à 22:16
Bonjour j'ai un probleme tout con, je suis en train de sous-classer un truc



struct DATADIAG

{

bool state;

WNDPROC ancienproc;

};



typedef struct DIALOG

{

int a;

int b;

DATADIAG* id;

}*LPDIALOG;



Avant je faisait

DIALOG dlg;

dlg.id=(DATADIAG*) malloc(100*sizeof(DATADIAG));

dlg.a=5;

aucun probleme mais pour le sous classment j'ai du faire



LPDIALOG dlg = new DIALOG;

pour pouvoir faire

SetWindowLong(tmphwnd, GWL_USERDATA,(long)dlg);



mais du coup message d'erreur de XP (pas de prb de compil)

dlg->a=5;

dlg->id=(DATADIAG*) malloc(100*sizeof(DATADIAG)); (ici)

6 réponses

ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
29 déc. 2005 à 00:50
Salut !


Je n'ai pas regarder ces fonction, et je n'ai pas tester ce code, mais ... Je ne comprend pas pourquoi tu as été forcé d'utiliser un pointeur sur DIALOG. Si dlg est une structure DIALOG, &dlg est son adresse et donc un pointeur -> SetWindowLong(tmphwnd, GWL_USERDATA, (long) &dlg);

Le travail c'est la santé, ne rien faire c'est la préservé !!!
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
29 déc. 2005 à 11:40
Ben en fait je suis obligé de passer par NEW et DELETE de maniere a
pouvoir le memoriser, en fait je sous-classe plusieurs dialogs a la
chaine par la meme procedure et dans la windproc (identique pour tout
les dialog aussi) avec getwindowlong() je peux recuperer le pointeur
pour pouvoir bosser, si je fait avec &dlg a la fin de la fonction
il sera libéré donc irecuperable dans la windproc.

Je ne peux pas non plus utiliser static.



Et NEW ne donne qu'un pointeur, c'est la mon probleme.
0
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
29 déc. 2005 à 16:31
Ah ok.
Du coup tu mélange le new et le malloc, pourquoi ne pas conservé le new ?
dlg->id=(DATADIAG*) malloc(100*sizeof(DATADIAG));
dlg->id = new DATADIAG[100]; //delete[] dlg->id;

Qu'est-ce que tu veut dire par "new ne donne qu'un poiteur" ? ou est le probleme ? il donne un poiteur et une zone, c donc exactement la meme chose qu'une variable classique.

Le travail c'est la santé, ne rien faire c'est la préservé !!!
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
29 déc. 2005 à 18:56
Ben en fait le probleme c'est que si je travaille avec dlg.id aucun probleme mais avec dlg->id ca plante.



en fait si je met

typedef struct DIALOG

{

DATADIAG tab[100]

}



avec le deboggeur je voit bien tab[1].state tab[2].state tab[3].state
la probleme c'est que la valeur 100 n'est pas fixe elle est definie au
moment de la creation

LPDIALOG dlg = new DIALOG;



voila pourquoi je fait avec malloc



si je fait

typedef struct DIALOG


{

DATADIAG *tab;


}

tab = new DATADIAG tab[100]

dans mon debogueur je ne voit QUE tab.state (au lieu de tab[1].state)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
29 déc. 2005 à 19:18
C'est bon ya plus de probleme en fait c'etait moi, 2 jours que je bloque la dessus

SetWindowLong(tmphwnd, GWL_USERDATA,(long)dlg);

et je sais pas pourquoi mais en faisant des manips dans tout les sens j'avais mit

SetWindowLong(tmphwnd, GWL_USERDATA,(long)&dlg);



Merci quand meme !!
0
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
29 déc. 2005 à 22:16
Lol oki, content que tu ai trouver ton problème. Au passage, je ne sais pas ce que tu utilise comme debugguer, mais il est générallement possible de regarer une "expression" ainsi il te montre tab[0].state puisque c'est le premier de la liste et qu'il ne peut pas connaitre le nombre d'element du tableau. Mais tu peux lui specifier de regarder l'expression "tab[15].state". Sous VC++ ca s'appelle les "espions".

Voila, bonne continuation @++

Le travail c'est la santé, ne rien faire c'est la préservé !!!
0
Rejoignez-nous