comp.lang.ada
 help / color / mirror / Atom feed
From: "Christoph Karl Walter Grein" <AdaMagica@web.de>
To: comp.lang.ada@ada-france.org
Subject: Re: Memory leak - What the ...?
Date: Mon, 11 Oct 2004 12:21:44 +0200
Date: 2004-10-11T12:21:44+02:00	[thread overview]
Message-ID: <mailman.275.1097490119.390.comp.lang.ada@ada-france.org> (raw)

with Ada.Text_Io;
use Ada.Text_Io;

with Ada.Unchecked_Deallocation;

package body Test_Aux is

    function Create (Data : in Stream_Element_Array) return Udp_Message is
	Msg : Udp_Message := (Ada.Finalization.Controlled with
			      Data => new Stream_Element_Array'(Data));
    begin
	Put_Line ("Create" & Stream_Element_Offset'Image (Data'Last));
	return Msg;
    end Create;

    procedure Adjust (This : in out Udp_Message) is
    begin
	if This.Data /= null then
	    Put_Line ("Adjust" & Stream_Element_Offset'Image (This.Data'Last));
	    This.Data := new Stream_Element_Array'(This.Data.all);
	else
	    Put_Line ("Adjust null");
	end if;
    end Adjust;

    procedure Finalize (This : in out Udp_Message) is
	procedure Free is new Ada.Unchecked_Deallocation
				 (Stream_Element_Array,
				  Stream_Element_Array_Access);
    begin
	if This.Data /= null then
	    Put_Line ("Finalize" &
		      Stream_Element_Offset'Image (This.Data'Last));
	else
	    Put_Line ("Finalize null");
	end if;
	Free (This.Data);
    end Finalize;

end Test_Aux;
with Ada.Exceptions;
with Ada.Streams;
use Ada.Streams;
use Ada;
with Text_Io;
use Text_Io;

with Test_Aux;
use Test_Aux;

procedure Test_It is
    Empty : Udp_Message;
    Arr : array (1 .. 2) of Udp_Message;
    -- Initialize is called for Empty and each component of Arr;
    -- does nothing since not overridden.
begin
    Text_Io.Put_Line ("Adding...");
    for I in Arr'Range loop
	Arr (I) := Create ((1 .. Stream_Element_Offset (I) =>
			       Stream_Element'First));
	-- Create 1      => Create an intermediate object Msg in place
	--                  with Data as given.
	--                  Neither Initialize nor Adjust is called.
	-- Adjust 1      => Some internal
	-- Finalize 1    =>               copying of the intermediate object
	-- Finalize null => Finalize (Arr (I)); Left side of assignment
	--                  statement; does nothing since Data = null.
	--                  Copy Msg to Arr (I) - Shallow copy.
	-- Adjust 1      => Adjust (Arr (I)); Make a deep copy from
	--                  This.Data.all (this is the intermediate Msg.Data).
	-- Finalize 1    => Finalize Msg - Destruct the intermediate object,
	--                  i.e. de-allocate Msg.Data.
	-- Create 2
	-- Adjust 2
	-- Finalize 2
	-- Finalize null
	-- Adjust 2
	-- Finalize 2
    end loop;
    -- I cannot see a problem here.

    Text_Io.Put_Line ("Deleting...");
    for I in Arr'Range loop
	Arr (I) := Empty;
	-- Finalize 1    => Finalize (Arr (I)); Left side of assignment
	--                  statement; de-allocates Data.
	--                  Copy Empty to Arr (I)
	-- Adjust null   => Adjust (Arr (I)); does nothing since
	--                  Empty.Data = null.
	-- Finalize 2
	-- Adjust null
    end loop;
    -- Finalize null
    -- Finalize null
    -- Finalize null
    -- Finalize is called for each component of Arr in inverse sequence, then
    -- for Empty.
    -- Does nothing since Data = null always.
    --
    -- I can't see a problem.
exception
    when E: others =>
	Text_Io.Put_Line ("Exception: " & Exceptions.Exception_Information (E));
end Test_It;

__________________________________________________________
Mit WEB.DE FreePhone mit hoechster Qualitaet ab 0 Ct./Min.
weltweit telefonieren! http://freephone.web.de/?mc=021201




             reply	other threads:[~2004-10-11 10:21 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-11 10:21 Christoph Karl Walter Grein [this message]
  -- strict thread matches above, loose matches on Subject: below --
2004-10-14  4:30 Memory leak - What the ...? Christoph Karl Walter Grein
2004-10-11  9:50 Christoph Karl Walter Grein
2004-10-10 21:33 Alex R. Mosteo
2004-10-10 22:05 ` Marius Amado Alves
2004-10-11  8:18   ` Alex R. Mosteo
2004-10-11 11:04     ` Marius Amado Alves
2004-10-11 13:02       ` Martin Krischik
2004-10-11  8:25   ` Martin Krischik
2004-10-11  8:56     ` Martin Dowie
2004-10-11 12:59       ` Martin Krischik
2004-10-11  1:40 ` Stephen Leake
2004-10-11  8:59   ` Alex R. Mosteo
2004-10-11 18:24     ` Stephen Leake
2004-10-12  3:02       ` Brian May
2004-10-12  8:45         ` Jean-Pierre Rosen
     [not found]           ` <mailman.282.1097576360.390.comp.lang.ada@ada-france.org>
     [not found]             ` <uvegkc.jrg.ln@skymaster>
2004-10-12 12:31               ` Marius Amado Alves
2004-10-12 14:47             ` Alex R. Mosteo
2004-10-12 16:05               ` Marius Amado Alves
2004-10-12 19:37                 ` Björn Persson
2004-10-12 22:10                   ` Marius Amado Alves
     [not found]                   ` <416C5646.1020506@netcabo.pt>
2004-10-13  0:17                     ` Stephen Leake
     [not found]                     ` <u655f1ng9.fsf@acm.org>
2004-10-13  6:24                       ` Marius Amado Alves
     [not found]               ` <416C00D6.90402@netcabo.pt>
2004-10-13  0:14                 ` Stephen Leake
     [not found]           ` <416BAFA4.7020400@netcabo.pt>
2004-10-13  0:07             ` Stephen Leake
2004-10-13 13:45               ` Hyman Rosen
2004-10-14  9:15                 ` Martin Krischik
2004-10-14 17:21                   ` Hyman Rosen
     [not found]             ` <uis9f1nw3.fsf@acm.org>
     [not found]               ` <mailman.301.1097650377.390.comp.lang.ada@ada-france.org>
2004-10-13  7:40                 ` Dmitry A. Kazakov
2004-10-13 17:44                   ` Mark Lorenzen
2004-10-14  8:03                     ` Dmitry A. Kazakov
2004-10-18  0:33           ` Brian May
2004-10-12 12:05         ` Alex R. Mosteo
2004-10-13  0:12           ` Stephen Leake
2004-10-13  8:39             ` Pascal Obry
2004-10-17  0:45           ` Brian May
2004-10-13  0:32         ` Matthew Heaney
2004-10-18  0:26           ` Brian May
2004-10-13  0:27       ` Matthew Heaney
2004-10-13  7:58         ` Martin Krischik
2004-10-13 13:01         ` Alex R. Mosteo
2004-10-13  0:25     ` Matthew Heaney
2004-10-13 12:26       ` Stephen Leake
2004-10-13 14:45         ` Matthew Heaney
2004-10-13 23:45           ` Brian May
2004-10-14  1:33         ` Jeffrey Carter
2004-10-11  8:04 ` Martin Dowie
2004-10-12 10:47   ` Alex R. Mosteo
2004-10-12 15:07 ` Alex R. Mosteo
2004-10-13 14:53   ` Matthew Heaney
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox