From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED.3d73Ybk3C5U4I2t8lv+lAQ.user.gioia.aioe.org!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Funny (so to say...) interaction of "not null" and Vectors? Date: Tue, 8 Oct 2019 18:21:49 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <3113a338-c9fd-4c9e-8197-9aca91d2b1d5@googlegroups.com> NNTP-Posting-Host: 3d73Ybk3C5U4I2t8lv+lAQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: en-US Xref: reader01.eternal-september.org comp.lang.ada:57263 Date: 2019-10-08T18:21:49+02:00 List-Id: On 2019-10-08 17:46, mockturtle wrote: > My suspect is that the dynamically created array can have some null access value, causing the error. > Does this make any sense? No it cannot, this is why you get the exception. Logically the default initialization of any non-empty array of not null pointers is equivalent to raising Constraint_Error. > If yes, I'll remove the "not null" requirement. There is a trick to keep "not null" in place. Given you are sure you will eventually overwrite all array elements: type Target is ...; type Pointer is access Target; Stock : aliased Target; -- Never ever used anywhere type Element is record Ptr : not null Pointer := Stock'Access; end record; type Some_Elements is array (...) of Element; P.S. Ada needs proper constructors and static checks enforcing these. Declarations like of Element must be illegal with checked exception contracts. P.P.S. In the sense that Element requires an initialization, it is an unconstrained subtype and should be declared/treated as type Element (<>) is ... That validity cannot be separated from constraint is another problem in Ada. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de