Dernières versions
...
Menu  Langue: en
Recherche




Articles & Documents

Fermer Tutoriaux

Préférences

Se reconnecter
---

Votre nom (ou pseudo) :

Votre code secret


 Nombre de membres 408 membres


Connectés :

( personne )
CPDB.Net

Nouvelles des Amis
Pub Google
Lettre d'information
Pour avoir des nouvelles de ce site, inscrivez-vous à notre Newsletter.
S'abonner
Se désabonner
23 Abonnés
Webmaster - Infos
Visites

   visiteurs

   visiteurs en ligne

Pagerank
forum.gifForum - ppCompiler [EN] - Sujet n°22

Forum - Forum
ppCompiler [EN] - ppCompiler [EN]


actif  Sujet n° 22  Why I crashed (pointers to functions)

le 08/04/2010 @ 09:04
par vasalvit

Anonyme



Hi All.

I try use pointers to functions, but application crached:


FUNCTION Some(Int : Integer) : Boolean;

BEGIN

    Some := True;

END;


TYPE

    TFunc : FUNCTION (Int : Integer) : Boolean;

    PFunc : ^Func;

VAR

    Func : TFunc;

    FuncP : PFunc;

BEGIN

    Func := Some;

    Func(10); // worked

    FuncP := @Some;

    FuncP^(10); // crached

    FuncP := @Some;

    Func := FuncP ^;

    Func(10); // crached

END.

Ecrire à vasalvit   Poster une réponse  Haut
Réponse n° 1
--------
le 11/04/2010 @ 00:03
par Philippe

Anonyme


"@Some" and "Some", when invoqued as right value in an assignement are both equal to a reference to the function "Some" which is represented by its address in memory.
Moreover, @Some is a pointer type, assignement compatible with all other pointer types. Thus FuncP:@Some is a legal assignement.
The call FuncP^(10); looks for a function at the memory location pointed by FuncP.
But after the assignement FuncP=@Some, the pointee is the adress of the function Some, not the expected memory location that contains a function reference. Thus Crash is normal.
Write instead :
FuncP:=@Func;
FuncP^(10);
In Pascal, pointer to procedural types are rarely necessary, as they lead to useless indirection. Direct procedural types are most of the time enough.
Note that procedural types are allowed as function parameters.
Ecrire à Philippe   Poster une réponse  Haut
actif sujet actif   clos sujet clos   Important! Important!   Nouveau Nouveau message   -   Rectifier Rectifier message   Cloturer Cloturer sujet   Remonter Remonter
[]
Catégories de discussion  Forum 




^ Haut ^