Gut, das ich verstanden werde. Endlich. Nach all den Jahren.
Meine Frage ist nun: Weshalb muss das gemacht werden?
Weil so gut wie jedes Feld eine Rolle spielt bzw. sich die Verwendung aus der Doku meistens ableiten lässt. Und -banal blöde Antwort- weil wir ein deterministisches Verhalten wollen und das geht nur mit deterministischen Eingabewerten. Ein Record als lokale Variable ist bezüglich ihres Inhaltes nicht deterministisch. FillChar bügelt erstmal Nullen drübber, damit wird es nicht unbedingt richtig, ist aber meist sicher (nullstrings, alles auf 'false', keine Optionen etc.).
Bemängelt habe ich an dem Bügeln und Setzen einzelner Felder (genau denen, die man gerade benötigt) nur die fehlende Codedokumentation. Mit meiner Vorgehensweise (die eigentlich aus der Faulheit heraus geboren ist), habe ich alle Felder parat und kann mich nicht mehr herausreden.
Und was sagt mir das bezüglich Memory Leak bei nicht verwenden von Fillchar oder/und nicht belegen aller Felder des Records usw. in Verbindung mit der Funktion und dem Record? Also: wie mach ichs richtig? Vor allem: Weshalb entsteht das MemoryLeak hier?
Eben 'nicht deterministisches Verhalten'. Mich wundert das auch (das Speicherleck), aber Du hast den Beleg dafür und ohne Quellcode der Shell bringt es nichts. Das Vorgehen deines Kollegen war nachlässig und Du durftest das ausbaden. Vielleicht ist es ein kleiner Bug in der Shell, der für Exploits (was ihr da gemacht habt, geht ja in die Richtung) ausgenutzt werden kann. Wer weiss.