comp.lang.ada
 help / color / mirror / Atom feed
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
>




  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