Problème de pointeur et d'ajout de données
Bonjour à tous.
Voici le souci : J'ai un fichier de coordonnées dont il faut que je récupère les données. Les données sont de la forme :
3.9983 -9.3670 1.1698 C 0 0 0 0 0 0 0 0 0
Pour les récuperer, j'utilise comme tout le monde readln(FFile,Buffer);
Comme il y a plusieurs espaces, j'applique DelSpace1(Buffer) puis je découpe la chaine comme cela :
Code:
1 2 3 4 5
|
FLine := TStringList.Create();
FLine.Clear;
FLine.Text := StringReplace(Buffer, ' ', #13#10, [rfReplaceAll]);
p^.Add_Atome(FLine[4], Ivar1); |
FLine contient alors un tableau contenant les diverses informations de la ligne.
Maintenant, j'utilise une liste chainée de classe "Molecules" et j'essaie d'ajouter les atomes ainsi que leurs coordonnées. Le probleme c'est que ca me fait "Invalid pointer operation."
Voici l'interface pour molécule :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
ptrMole = ^Molecules;
Molecules=Class(TObject) // Création de Molecule dérivant de TObject
private
Atome : ptrAtoms; // Liste chainé d'atomes
Nom : String; // Nom de la molécule
NbAtom : integer;
NbBond : integer;
public
Suivant : ptrMole;
constructor create();
destructor destroy(); override;
procedure Add_Atome( At_Nom:String ; At_Num:integer);
end; |
Le code de la fonction qui me pose probleme :
Code:
1 2 3 4 5 6 7 8 9 10
| procedure Molecules.Add_Atome (At_Nom:String ; At_Num:integer);
var
p: ptrAtoms;
begin
new(p);
p^.Nom := At_Nom;
p^.Num := At_Num;
p^.Suivant := Atome;
Atome := p;
end; |
Ce que j'arrive pas à comprendre, c'est que pour commencer la liste chainée, je crée 1 "faux atome" : p^.Add_Atome('', -1); Et ca marche très bien !!! Mais dès que je remplace '' par FLine[4] (cf plus haut), il me sort le "invalid pointer operation". Je commence en Free Pascal et j'avoue je bug un peu pour le coup. Si vous pouviez m'aider ca serait sympa merci.