From: "David C. Hoos" <david.c.hoos.sr@ada95.com>
To: "skidmarks" <aschwarz@acm.org>
Cc: "comp.lang.ada@ada.eu.org" <comp.lang.ada@ada-france.org>
Subject: Re: Ada Pointer Problem
Date: Fri, 1 Oct 2004 10:50:18 -0500
Date: 2004-10-01T10:50:18-05:00 [thread overview]
Message-ID: <mailman.147.1096645836.390.comp.lang.ada@ada-france.org> (raw)
In-Reply-To: 35f054ea.0410010726.466caebc@posting.google.com
The problem is that Object is local to procedure B, while
X_Ptr is declared at library level (i.e., non-local).
The principle is that Object exists only when procedure B is
executing, and what is trying to be prevented is having a value
of type X_Ptr available when Object no longer exists. This could
happen if B were not the main procedure, but were instead a
library-level procedure that could be called by some other
subprogram.
Since procedure B is known to the programmer to be the main
procedure, in this case, if one is using GNAT, one could
use the 'Unrestricted_Access attribute, instead of the 'Access
attribute, and do what you want.
----- Original Message -----
From: "skidmarks" <aschwarz@acm.org>
Newsgroups: comp.lang.ada
To: <comp.lang.ada@ada-france.org>
Sent: Friday, October 01, 2004 10:26 AM
Subject: Ada Pointer Problem
> Each Ptr assignment below yields the following error message:
>
> -- 9. Ptr : a.X_Ptr := Object'Access;
> -- non-local pointer cannot point to local object
>
> In the past, the only way that I seem to be able to fix the problem is to
> put the pointer and assignment in global space (either in file global or
> in a package spec). I've looked at Ada as a Second Language (Cohen) and,
> with less diligence, at the Ada LRM but can't figure what I'm doing wrong.
> What am I doing wrong?
>
> thanks
> art
>
> -----------------------------------------------------------
> -----------------------------------------------------------
>
> package a is
> type X is new Integer;
> type X_Ptr is access all X;
> end a;
>
> --------------------------------------------------------
>
> -- Main Program
>
> with a;
>
> Procedure b is
> subtype Y is a.X;
> subtype Y_Ptr is a.X_Ptr;
>
> Object : aliased a.X;
> Object_Y: aliased Y;
> Ptr : a.X_Ptr := Object'Access;
> Ptr_Y : Y_Ptr := Object'Access;
> Ptr_OY : a.X_Ptr := Object'Access;
> Ptr_1Y : Y_Ptr := Object'Access;
>
> begin -- b
> Ptr := Object'Access;
> Ptr_Y := Object'Access;
> end b;
> _______________________________________________
> comp.lang.ada mailing list
> comp.lang.ada@ada-france.org
> http://www.ada-france.org/mailman/listinfo/comp.lang.ada
>
next prev parent reply other threads:[~2004-10-01 15:50 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-01 15:26 Ada Pointer Problem skidmarks
2004-10-01 15:50 ` David C. Hoos [this message]
2004-10-01 18:15 ` Jeffrey Carter
2004-10-01 17:24 ` Ludovic Brenta
-- strict thread matches above, loose matches on Subject: below --
2004-10-01 19:34 aschwarz1309
2004-10-02 0:47 ` Jeffrey Carter
2004-10-02 23:37 ` Randy Brukardt
2004-10-06 15:43 ` skidmarks
2004-10-06 18:19 ` Jeffrey Carter
2004-10-16 3:53 ` Benjamin Ketcham
2004-10-16 13:25 ` John B. Matthews
2004-10-18 18:09 ` Georg Bauhaus
2004-10-06 19:29 ` Georg Bauhaus
2004-10-07 18:45 ` skidmarks
2004-10-08 0:35 ` Jeffrey Carter
2004-10-08 12:02 ` Jean-Pierre Rosen
2004-10-08 16:58 ` Ludovic Brenta
2004-10-08 23:26 ` Björn Persson
2004-10-10 18:01 ` skidmarks
2004-10-08 14:03 ` Georg Bauhaus
2004-10-08 14:23 ` Dale Stanbrough
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox