Eine gesonderte Erwähnung in NOTICE.TXT gibt's aber keine
Warum? Weil du da schon drin stehst!
Du kannst auch gern meinen Realnamen eintragen: Sebastian Jänicke
Noch ein Wort zur Fehlersuche:
Ich habe zwar manuell gesucht, indem ich den Weg des Arrays verfolgt habe und schlicht den Ausführungszeiger testweise über die Methode hinweg geschoben habe, so dass ich gemerkt habe, dass es daran liegt, und dann habe ich das Problem auch schon gesehen. Aber wäre der betreffende Quelltext länger gewesen oder hätte ich es nicht so schnell gefunden, hätte ich es anders gemacht.
Ich denke, dass das allgemein interessant sein könnte, weil es nicht jeder kennt, deshalb schreibe ich kurz etwas zum Thema Datenhaltepunkte.
Was macht ein Datenhaltepunkt?
Ein Datenhaltepunkt hält an, wenn eine Speicherstelle verändert wird.
Warum hilft uns das hier?
Weil im Speicher des Arrays außerhalb der Elemente geschrieben wurde.
Heißt:
In TDECPasswordHash.SetSalt wird FSalt zugewiesen. Bis zum Freigeben des Speichers dürfte nun nur noch eine Änderung an den Elementen passieren. Also setzt man einen Haltepunkt auf FSalt nach der Zuweisung. Das Ergebnis ist, dass an genau der Fehlerstelle angehalten wird:
Datenhaltepunkte helfen enorm, wenn Speicher falsch überschrieben wird, vorausgesetzt man weiß vorher an welcher Stelle etwas überschrieben wird.