OVH Cloud OVH Cloud

CB6 dynamic_cast ./ composan pb :fonctionement et memoire

5 réponses
Avatar
Olivier Sarda
Bonjour,
j'ai un formulaire ou je tente d'effacer des zones de saisies
il y a des TComboBox, TEdit ,TAlignEdit (composant fait par CGI)
il y a un dizaine de controles

je fais comme code :


Code:
for(int i=0 ; GroupBoxAdd->ControlCount;i++){

TControl*pCrtl=GroupBoxAdd->Controls[i];

if(TEdit * pEd=dynamic_cast<TEdit*>(pCrtl)){
pEd->Text="";
}else{

if(TComboBox
*pCombo=dynamic_cast<TComboBox*>(pCrtl)){
pCombo->Text="";
}else{

if(TAlignEdit *
pAlignEd=dynamic_cast<TAlignEdit*>(pCrtl)){
pAlignEd->Text="";
}

}

}


}




BCB me reponds :

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet Etik2.exe a provoqué une classe d'exception EListError avec
le message 'Mémoire insuffisante lors de l'extension du flux mémoire'.
Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------

5 réponses

Avatar
Pierre Maurette
"Olivier Sarda" typa:



Bonjour,
j'ai un formulaire ou je tente d'effacer des zones de saisies
il y a des TComboBox, TEdit ,TAlignEdit (composant fait par CGI)
il y a un dizaine de controles

je fais comme code :


Code:
for(int i=0 ; GroupBoxAdd->ControlCount;i++){

TControl*pCrtl=GroupBoxAdd->Controls[i];

if(TEdit * pEd=dynamic_cast<TEdit*>(pCrtl)){
pEd->Text="";
}else{

if(TComboBox
*pCombo=dynamic_cast<TComboBox*>(pCrtl)){
pCombo->Text="";
}else{

if(TAlignEdit *
pAlignEd=dynamic_cast<TAlignEdit*>(pCrtl)){
pAlignEd->Text="";
}

}

}


}




BCB me reponds :

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet Etik2.exe a provoqué une classe d'exception EListError avec
le message 'Mémoire insuffisante lors de l'extension du flux mémoire'.
Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------
Ce n'est peut-être pas le meilleur groupe pour cette question.

Même si GroupBoxAdd->ControlCount
signifie
GroupBoxAdd->ControlCount != 0
dans la définition du for(;;), je ne vois pas bien dans le code ce qui
ferait que cette valeur évolue.
--
Pierre

Avatar
Olivier Sarda
j'ai trouvr j'avais oublie de faire un test dans ma boucle
"Pierre Maurette" a écrit dans le message de news:

"Olivier Sarda" typa:



Bonjour,
j'ai un formulaire ou je tente d'effacer des zones de saisies
il y a des TComboBox, TEdit ,TAlignEdit (composant fait par CGI)
il y a un dizaine de controles

je fais comme code :


Code:
for(int i=0 ; GroupBoxAdd->ControlCount;i++){

TControl*pCrtl=GroupBoxAdd->Controls[i];

if(TEdit * pEd=dynamic_cast<TEdit*>(pCrtl)){
pEd->Text="";
}else{

if(TComboBox
*pCombo=dynamic_cast<TComboBox*>(pCrtl)){
pCombo->Text="";
}else{

if(TAlignEdit *
pAlignEd=dynamic_cast<TAlignEdit*>(pCrtl)){
pAlignEd->Text="";
}

}

}


}




BCB me reponds :

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet Etik2.exe a provoqué une classe d'exception EListError
avec


le message 'Mémoire insuffisante lors de l'extension du flux
mémoire'.


Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------
Ce n'est peut-être pas le meilleur groupe pour cette question.

Même si GroupBoxAdd->ControlCount
signifie
GroupBoxAdd->ControlCount != 0
dans la définition du for(;;), je ne vois pas bien dans le code ce qui
ferait que cette valeur évolue.
--
Pierre



Avatar
Pierre Maurette
"Olivier Sarda" typa:

j'ai trouvr j'avais oublie de faire un test dans ma boucle
C'est bien. Ceci dit, y'a peut-être un peu plus qu'un test à ajouter.

J'ai un peu de mal avec votre boucle for(;;). Un second membre comme :
for(int i=0; i < GroupBoxAdd->ControlCount; i++){...
serait plus sympathique.
Et même

int GPACC = GroupBoxAdd->ControlCount;
for(int i=0; i < GPACC ; i++){...

si GroupBoxAdd->ControlCount n'est pas modifié dans la boucle (et il
ne l'est certainemnt pas).
--
Pierre

Avatar
Christophe de VIENNE

int GPACC = GroupBoxAdd->ControlCount;
for(int i=0; i < GPACC ; i++){...



Petite question de style. Je fais souvent ceci :

for(int i = <debut>, i_end = <fin>; i != i_end; ++i)

Est-ce choquant ?


A+


--
Christophe de Vienne

Avatar
tib.motuelle
Christophe de VIENNE wrote in message news:<newscache$greczh$u05$...

int GPACC = GroupBoxAdd->ControlCount;
for(int i=0; i < GPACC ; i++){...



Petite question de style. Je fais souvent ceci :

for(int i = <debut>, i_end = <fin>; i != i_end; ++i)

Est-ce choquant ?


Je ne trouve pas ca choquant tant que ca reste lisible (oui oui, c'est subjectif).
En général je préfère toutefois sortir i_end pour le déclarer const.

Bertrand.