Utilisation des pointeurs

XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005 - 1 août 2005 à 15:08
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 1 août 2005 à 21:23
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

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 août 2005 à 15:44
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
0
XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005
1 août 2005 à 15:54
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 août 2005 à 16:40
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()
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
1 août 2005 à 19:00
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 ]
0

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

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 août 2005 à 21:23
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
0