Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#1

C++ Builder lastige Frage / ReallocMem und ReallocMemory

  Alt 22. Aug 2020, 16:39
Delphi-Version: 10.1 Berlin
Hallo,

ich bin immer noch dabei meine ToDO-Liste für die DEC
(https://github.com/winkelsdorf/Delph...tionCompendium)
abzuarbeiten. Ein Punkt dreht sich dabei um die Done Methode der Hash Basisklasse.
Diese wird praktisch bei jedem Hash-Vorgang am Ende aufgerufen. Und da drin liegt mein Verständnisproblem.
Siehe auch den Kommentar in der Methode.

Fragen:

1. Wozu braucht man ReallocMem hier, wenn doch FBuffer ein PByteArray ist und somit ein Zeiger auf ein
Array fixer größe? Der Code war schon in DEC 5.2 drin, nur wozu?

2. Welcher Unterschied ist zwischen ReallocMem(FBuffer, 0); und FBuffer := ReallocMemory(FBuffer, 0);?
Wenn ich mit wenig Aufwand auch C++ Builder kompatibilität umsetzen kann, warum nicht.
Nur muss es während der Entwicklung irgend ein Problem gegeben haben das dazu führte,
dass ich bei ReallocMem blieb. Anhand der vorhandenen Unit Tests kann ich das Problem
derzeit (in 10.3.3, die Entwicklung hatte ich aber in 10.1 übernommen/gestartet) nicht mehr
nachvollziehen. Weiß jemand ob sich da in diesen Routinen was getan hat?
Und wenn's C++ Builder kompatibel sein soll, muss es ReallocMem sein?

Delphi-Quellcode:
procedure TDECHash.Done;
begin
  DoDone;
  ProtectBuffer(FBuffer^, FBufferSize);

  FBufferSize := 0;
  // ReallocMemory instead of ReallocMem due to C++ compatibility as per 10.1 help
// Commented out, as it seems to not properly work with a new size of 0, but
// calling FreeMem is not correct either as it frees the pointer. One would get
// around of all of this by getting rid of PByte as buffer type completely by
// making it a TBytes variable
// FBuffer := ReallocMemory(FBuffer, 0);

  ReallocMem(FBuffer, 0);
end;
  Mit Zitat antworten Zitat