Code: Alles auswählen
Procedure Tralala;
var Bla: TBla;
begin
FillChar(Bla,SizeOf(Bla),#0)
end;
Wenn ich das jetzt dem FPC unterschiebe, dann nörgelt der mich an, da die Variable Bla zum Zeitpunkt der Übergabe an FillChar() nicht initialisiert sein. Der Grund dafür ist wohl, dass der erste Parameter von FillChar() als 'var' attributiert ist.
Mein Vorschlag, dies nach 'out' zu ändern hat Jonas Maebe abgelehnt (http://bugs.freepascal.org/view.php?id=17020):
Soweit akzeptiere ich das erst mal, verstehe sie aber noch nicht so ganz.It is not possible to do that, because "out" also automatically finalizes any automated types. That means that this would result in crashes if someone e.g. allocates memory for an array of ansistrings using getmem and then uses fillchar to initialize it to zero (because the "out" parameter would cause the random data in the getmem'ed block to be finalized).
This behaviour cannot be changed because of compatibility reasons.
Automatisierte Typen sind offenbar Datentypen, deren Konstruktoren und Destruktoren automatisch gerufen werden (Strings und dyn. Arrays)? Kann man sich sowas eigentlich auch selbst definieren?
Ich war davon ausgagengan, dass das Attribut 'out' soviel bedeutet wie: Da kann man irgendwas Uninitialisiertes reinstecken und hinterher hat das einen gültigen Wert.
Doch was verwendet man denn jetzt anstelle von FillChar() ?