Boucle incorrecte

POLCAP Messages postés 2 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 28 novembre 2005 - 28 nov. 2005 à 09:14
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 - 29 nov. 2005 à 20:37
Salut,



je rencontre un problème avec une boucle For.

Dans une function j'initialise une collection et je la parcours avec ma
boucle for , jusque la pas de souci, mais quand j'essaye de me servir
de l'indice de boucle , il est toujours réinitialisé à 1. A la premier
execution il est à 0 mais apres à chaque passage dans la boucle la
valeur est 1 .

J'ai meme essayé de créer une variable intermediaire, et de l'incrementé avec inc() mais pareil même symptôme.

Le pluis inquietant c'est que le nombre de boucle est correct .



Si quelqu'un a une idée je suis preneur.



Merci

Polcap





ma boucle :





Coll := DbDesign.FindDesignNotes (Formul,0,NoteClassSearched, '');



try

indice := 0;

for ind:= 0 to coll.count-1 do

begin

DocDesign := coll.Document [indice];



InitFormInfo(FormInfo);

DocDesign.Free;

inc(indice);

end;

5 réponses

POLCAP Messages postés 2 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 28 novembre 2005
28 nov. 2005 à 09:43
Tiens j'ai trouve un truc super étrange , je n'ai le bug que si
j'optimise mon code (option du compilateur) sinon ca marche bien. Ca
ressemble mega a un bug .



M'enfin ....
0
cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
28 nov. 2005 à 11:48
il y a de grande chance que le compilateur virre carrement le "indice" et le "ind" pendant ses optimisation, il le remplace sans doutes par un pointeur pour parcourrir le tableau et l'increment pour chaque iteration.
il transforme peut-être ( et j'insiste sur le "peut-être" ) le code en un truc du genre

For p:=Pointer(Coll.FItems) To Pointer(Coll.FItems.Count-1) Do
InitForInfo(ForInfo);
TDocDesign(p).Free,
End;
( dur dur de traduire en delphi la traduction eventuelle du compilateur )
Mais normalement ça n'a aucune impacte sur le code ( ça change pas ce qu'il fait ) sauf qu'au debug ton I a des valeurs completement a l'ouest ( comme il n'existe pas ). Enfin, ce que je dis n'est qu'un possibilité, il faudrait verrifier le code ASM generé. Si tu t'y connait un peu en ASM, il suffit de mettre un point d'arret où tu veux et a l'execution faire ctrl+alt+c

bouh
0
cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
28 nov. 2005 à 11:52
( je precise quand même pour ceux qui auront pas compris qu'il est impossible d'écrire la boucle que j'ai écrit, FItems étant private dans TCollection et le compilateur ne voulant pas de pointeur en boucle For , c'est vraiment pour representer ( Je sent déjà venir les critiques ))

bouh
0
Emandhal Messages postés 194 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 3
28 nov. 2005 à 16:47
Juste un truc, comme ca en passant... (Non pas pour toi N)
Pourquoi ne pas faire ça ? :

Coll := DbDesign.FindDesignNotes (Formul,0,NoteClassSearched, '');

try
for ind:= 0 to coll.count-1 do
begin
DocDesign := coll.Document[ind];

InitFormInfo(FormInfo);
DocDesign.Free;
end;
0

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

Posez votre question
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
29 nov. 2005 à 20:37
POLCAP, quelquechose me chagrine avec ton code. Quelques eclaircissements pourraient m'aider à mieux analyser ton problème.

DocDesign il sert à quoi ??? Tu l'initialises puis tu le libères sans l'utiliser !! Est-ce une variable locale ou bien globale(utilisée dans InitFormInfo) ?? Est ce que c'est DocDesign que tu veux libérer ou bien l'élément de la collection coll.Document[ind] ??

N.B. Dans le menu Projet, Options, Messages du compilateur, vérifie que tout est coché et recompile ton projet. Tu auras alors les optimisations effectuées par Delphi (variables et/ou lignes supprimées car non utilisées, etc...)

Cordialement.



<HR>



Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
0
Rejoignez-nous