Envoyé par
King Kaiser
De plus, est-ce que c'est si nécessaire de donner la valeur NIL au pointeur avant de l'initialiser avec new()?
Sûrement pas : c'est une instruction inutile.
Juste une dernière précision après la démonstration magistrale de Wormful_Sickfoot : tu peux forcer la fonction New à renvoyer Nil en cas d'erreur, au lieu de provoquer une runtime error bête et méchante.
Pour ce faire, il suffit d'écrire une petite fonction comme celle-ci :
1 2 3 4 5 6
| {$F+}
Function ERREUR_ALLOCATION (Taille : Word) : Integer;
Begin
ERREUR_ALLOCATION:=1;
End;
{$F-} |
(ne surtout pas oublier les appels far)
Ensuite, il faut affecter l'adresse de cette fonction à la variable HeapError (de l'unité System), au début de ton programme principal :
HeapError:=@ERREUR_ALLOCATION;
Ainsi, après chaque allocation, tu testes la valeur du pointeur renvoyé avant de continuer. Cela alourdit un peu l'écriture de ton programme, mais ça fait nettement plus "pro".
Exemple :
1 2 3 4 5 6
| New(p);
if p <> Nil
then
{ traitement }
else
WriteLn('Mémoire insuffisante'); |
Dernier détail : la fonction doit renvoyer la valeur 1 avec BPW, mais je me demande si ce n'est pas -1 avec TP7. A vérifier.
Partager