PChar nimmt nur den Pointer zu den Daten, die ihm übergeben wurden und schreibt diesen in die Variable, welcher es zugewiesen wurde,
da du jetzt aber ini.ReadString nicht erst in eine Variable (z.B. String) einließt, nimmt Delphi selber eine Temporäre Variable und übergibt den Wert von ini.ReadString dieser.
Und um effektief zu sein, nimmt Delphi natürlich nicht ständig eine Neue, sonder verwendet immer wieder die Selbe, also sobald das Passwort ausgelesen wird, wird auch der Inhalt dieser temporären Variable verändert und da aber in dein Zeiger (muffel) noch darauf Zeigt, wird natürlich auch dessen Inhalt mit geändert und am Ende auch mit Freigegeben
Du mußt also deine Werter aus der Ini irgendwo abspeichern (in einem eigenständigem Speicherbereich, vorzugsweise eine eigenen Variable) und darauf kannst du dir erst einen Pointer holen, wenn es dann überhaupt noch nötig ist (hast ja dann auch eine echte Variable mit den gewünschten Werten) ^^