Thema: Delphi FreeMem und Pointer

Einzelnen Beitrag anzeigen

oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#2

Re: FreeMem und Pointer

  Alt 8. Jun 2005, 12:52
...hier nochmal eine Unit zum selber ausprobieren:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Test: TButton;
    procedure TestClick(Sender: TObject);
  private
    procedure SetElement(Vector: PDouble; Index: Integer; Value: Double);
    function GetElement(Vector: PDouble; Index: Integer): Double;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SetElement(Vector: PDouble; Index: Integer; Value: Double);
begin
  Inc(Vector, Index);
  Vector^ := Value;
  Dec(Vector, Index);
end;

function TForm1.GetElement(Vector: PDouble; Index: Integer): Double;
begin
  Inc(Vector, Index);
  Result := Vector^;
  Dec(Vector, Index);
end;

procedure TForm1.TestClick(Sender: TObject);
var
  TestVector: PDouble;
begin
  GetMem(TestVector, 20);

  Self.SetElement(TestVector, 10, 0.1);
  ShowMessage(FloatToStr(Self.GetElement(TestVector, 10)));
  ShowMessage(FloatToStr(Self.GetElement(TestVector, 10)));
  assert(Self.GetElement(TestVector, 10) = 0.1);

  FreeMem(TestVector, 20);
end;

end.
Wenn ich den Code aufrufe, dann schlägt (in der obigen) Form sogar das assert schon fehl. Die erste ShowMessage gibt korrekt 0.1 aus und die zweite zeigt jedesmal 1,9059698307456E-307.
...Ich feuer gleich mein Notebook gegen die Wand
  Mit Zitat antworten Zitat