Utilisation des pointeurs

Signaler
Messages postés
102
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
12 août 2005
-
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
-
Bonjour,

j'ai un pb avec une procedure mais je vois dou vien celui-ci, voici mon code:

New(AFile);
with AFile^ do
begin
S:=Str;
M:=5;
L:=Pos('$',S);
Separator:=Copy(S,L+1,1);
S:=Copy(S,L+4,Length(S));
for I:=1 to 7 do
begin
L:=Pos(Separator,S);
S:=Copy(s,0,L-1);
case I of
1:NbAnal:=strtoint(s);
2:Etat:=strtoint(s);
3:DateGene:=strtodate(s);
4:HeureGene:=strtotime(s);
5:try
DateValid:=strtodate(s);
except
DateValid:=0;
end;
6:try
HeureValid:=strtotime(s);
except
HeureValid:=0;
end;
7:LibEnq:=s;
end;
S:=Copy(Str,M+L+1,Length(Str));
M:=M+L;
end;
end;
ListeFichier.Add(AFile);
Dispose(AFile);

kan j'excute mon prog, il vien lire dans les entetes de fichiers, et faire une lite de fichiers avec leurs caractérisques, mais kan j'ai o dela de 1 fichier il m'ajoute pas les fichiers dans la liste, il ajoute seulement le premier...

5 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
salut,

je suppose que ListeFichier est une Tlist ;

si tu fais Dispose(AFile); tu supprimes ton pointeur et ListeFichier ne pointe sur rien;

il est normal que tu ne puisse pas relier ces données

le Dispose ne doit être executer que quand tu n'utilisera plus ta ListeFichier.

bonne prog
Messages postés
102
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
12 août 2005

Oui mais je pensé ke une fois placer dans la liste il n'été pplus nécéssaire de gardé le pointeur , il suffit de le redéclarer pour aller cherché les élément de la liste
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
non la procedure New() attribue de l'espace memoire aux donnees
si tu derefrence ton pointeur la place accordeé a sont recuperees
par le systeme et en principe la valeur Nil est donnee au pointeur donc
et donc le pointeur de la ListeFichier ne pointe plus sur les donnees.

l'attribution de la valeur nil au pointeur est la pour eviter d'ecrire dans des zones memoires non referencees.

il est donc indispensable que tu gardes ton pointeur tant que tu utilises at liste

vas voir dans l'aides DELPHI pour l'utilisation des Tlist dans l'exemple de la procedure Add()
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
Entièrement d'accord avec jlen100 !


Quand tu écris :
ListeFichier.Add(AFile); tu
n'ajoutes que la valeur du pointeur dans la TList. Il faut aussi
conserver la variable pointée, et c'est juste à la fin, ou quand tu
n'as plus besoin de ta liste que tu peux écrire

for i:= 0 to ListeFichier.Count-1 do

Dispose(ListeFichier[i]);

ListeFichier.Clear;


pour récupérer la mémoire et vider la liste



Ken@vo
<hr size ="2" width="100%">Code, Code, Codec !

[%3C/body ]
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
une petite experience:

si tu tentes de modifier une valeur de ta liste tu auras surement une
erreur d'execution : "violation de d'acces a l'adresse 0000000 "ou
quelque chose du même genre