Hi Kevan & Bastiaan,
Here is a short example showing two methods for dynamic allocation. My reading of the opinions on comp.lang.ad is that it's best to avoid using 'access (as it can lead to dangling pointers). But as the second method shows, sometimes you have no choice but to use 'access (it can also be used to pass procedure names as parameters but that's another story).
Cheers, Leo
with Ada.Text_IO; use Ada.Text_IO; with Ada.Unchecked_Deallocation;
procedure Foo is
package Integer_IO is new Ada.Text_IO.Integer_IO (Integer); use Integer_IO;
begin
-- example without using 'access
for i in 10 .. 20 loop
-- create xg on the stack (okay but stack size is limited) -- xg exists only within this declare block declare xg : Array (0..i-1) of Float; begin Put (xg'last); New_line; end;
end loop;
-- example using 'access -- essential for very very large arrays
declare
-- could put next three lines after "procedure Foo" above type vector is array (Integer range <>) of Float; type vector_ptr is access vector; procedure Free_Vector is new Ada.Unchecked_Deallocation (vector, vector_ptr);
huge : Integer := 128_000_000;
xg_ptr : vector_ptr := new vector (0..huge); xg : vector renames xg_ptr.all;
begin Put (xg'last); New_line; Free_Vector (xg_ptr); -- essential to avoid memory leaks end;
end Foo;
On 5 January 2017 at 09:38, Bastiaan Veelo Bastiaan@veelo.net wrote:
On 4 Jan 2017, at 23:26, Kevan Hashemi hashemi@brandeis.edu wrote:
My main concern is whether I can implement the following dynamic
allocation of memory space for graphs, images, and matrices.
type graph_type(num_points:integer)=array [0..num_points-1] of real; graph_ptr=^graph_type; var xg:graph_ptr; i:integer; begin for i:=100 to 200 do begin new(xg,i); dispose(xg,i); end;
I just came across an Ada example that may help you: https://en.wikibooks.org/wiki/Ada_Programming/Types/access# Deleting_objects_from_a_storage_pool
I am pleased to see this discussion, because at my work we are somewhat in the same boat. We use the Prospero compiler, which finally appears to have vanished from the Internet. We have previously considered gpc, but its limited support for Extended Pascal has stopped us. We will have a serious look at Ada.
Bastiaan.