Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Vorzeichenbehaftete Zahlen und Endianess

  Alt 22. Jul 2020, 14:21
Jo, standardmäßig geht es meistens so
Delphi-Quellcode:
function SwapArray(const Arr: TBytes): TBytes; // CONST kann hier nicht schaden, weil den Input willst ja eh nicht verändern.

oder

procedure SwapArray(var Arr: TBytes);

oder

procedure SwapArray(const InArr: TBytes; var OutArr: TBytes); // oder OUT statt VAR

Delphi-Quellcode:
  procedure Test;
  var ArrNum:array of Byte;
  begin
    ...
    i := PInteger(@ArrNum[0])^;
  end;
Sowas geht garnicht.
Wenn Pointer, dann solltest/mußt DU den Speicher reservieren und dort den Inhalt des Arrays reinkopieren.

Denn nach der Prozedur ist die Variable und damit auch das Array nicht mehr vorhanden (die letzte und einzige Referenz endet mit dieser Variable und Delphi gibt den Speicher frei)
und der Pointer zeigt ins Nirvana, egal ob man sich einen Zeiger auf die Variable oder auf die Arraydaten besorgt hatte.


Alle anderen Tricks mit Pointer und Manipulation der Referenzzählung, sollte man tunlichst vermeiden. (vor allem wenn man keine Ahnung von den Interna hat und selbst dann ist sowas selten eine gute Idee)
$2B or not $2B

Geändert von himitsu (22. Jul 2020 um 14:28 Uhr)
  Mit Zitat antworten Zitat