(BTW: warum gibt mir der Compiler nicht sopfort ne fehlermeldung oder so?)
Weil dieses grundsätzlich kein falscher/fehlerhafter Code ist?
Man muß rückgabewerte nicht speichern (
x := ...
)
und man kann über
x := variable.Create;
ein neues Objekt vom internen Typ des Objektes in der Variable erstellen.
Nur wenn da kein kein Objekt in der Variable drin ist, dann knallt es natürlich.
Delphi-Quellcode:
var
obj, obj2: TControl;
begin
obj := TEdit.Create(Self);
obj2 := obj.Create(Self);
ShowMessage(obj2.ClassName);
In deinem Fall war wohl irgendein zufälliger Wert/Zeiger/Pointer in der Objektvariable drin, welcher so zeigte, daß anfangs noch "irgendwlecher" beschreibbarer Speicher vorlag und ab einer gewissen Stelle war dieser Speicher nicht mehr beschreibbar und es knallte.
Womöglich hätte es auch gut gehen können, z.B. wenn der Zeiger woandershin zeigte oder wenn dein Array kleiner wäre,
aber dann hätte es woanders knallen können, weil du ja auch einen wichtigen Speicherbereich hättest überschreiben können (eine Art von Buffer Overrun).