Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FreeMem und Pointer (https://www.delphipraxis.net/47250-freemem-und-pointer.html)

marabu 8. Jun 2005 12:42

Re: FreeMem und Pointer
 
Hallo Jan,

du solltest Non-Integer-Values nicht auf Gleichheit testen, ein epsilon-Test ist da sicherer:
Delphi-Quellcode:
var
  epsilon: Double = 0.001;

procedure TForm1.TestClick(Sender: TObject);
var
  TestVector: PDouble;
  allocSize: integer;
begin
  allocSize := 20 * SizeOf(Double);
  GetMem(TestVector, allocSize);

  SetElement(TestVector, 10, 0.1);
  assert(Abs(GetElement(TestVector, 10) - 0.1) < epsilon);

  FreeMem(TestVector, allocSize);
end;
Und die folgende Zeile kannst du dir bei Call-By-Value schenken:

Delphi-Quellcode:
Dec(Vector, Index);
Grüße vom marabu

oXmoX 8. Jun 2005 12:42

Re: FreeMem und Pointer
 
Zitat:

Zitat von himitsu
Das/Warum SizeOf(PDouble) ja 4 ist, ist ja geklärt.

Ich wollte nur noch sagen, dass man es auch anders hätte lösen können ^^

Delphi-Quellcode:
SizeOf(TestVector^)
das ^ macht ja aus dem Zeige wieder den Datentyp, was
Delphi-Quellcode:
SizeOf(PDouble^)
und damit natürlich auch
Delphi-Quellcode:
SizeOf(Double)
entspricht, allerdings hätte dieses auch mal den Vorteil, wenn der Typ von TestVector geändert würde, denn dann würde das Ergebnis von SizeOf immernoch stimmen ^^

..ist mir schon klar. Trotzdem vielen Dank!

Hab grad neu Lösung gefunden (bzw. gefunden bekommen in nem anderen Forum). Wenn man statt es expliziten Wertes 0.1 eine Variable (Type Double) nimmt geht's nämlich auf einmal. 0.1 ist nämlich implizit Single.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz