Ich scheine Code erstellt zu haben, der den Speicher zerstört.
Da ich noch nie solche Probleme hatte, setze ich jetzt eine Invalid Pointer Operation.
Im Folgenden wird der Wert der Konstanten Zeichenkette sFilename nach dem Aufruf von PromptForXYZPropertiesSettings verworfen.
// Allow the user to quickly display the properties of XYZ without needing to display the full Editor
function PromptForXYZProperties(const sFilename:string; var AXYZProperties: TXYZProperties): boolean;
var
PropEditor: TdlgEditor;
begin
PropEditor:= TdlgEditor.create(nil);
try
PropEditor.LoadFromFile(sFilename); <-- sFilename = 'C:\My Folder\Some Folder.txt'
PropEditor.SelectedXYZProperties := AXYZProperties;
// Bypass PropEditor to show form owned by it
Result := PropEditor.PromptForXYZPropertiesSettings;
if Result then
begin
PropEditor.SaveToFile(sFilename); <-- sFilename now somethign like 'B'#1#0#0'ë' or value of a different var
end;
finally
PropEditor.free;
end;
end;
Andere Details:
- Delphi 2007, Windows 7 64 Bit, aber kann beim Testen der EXE auf XP reproduzieren
- ENTFERNEN von CONST STOPPT PROBLEM VOM AUSSTELLEN (aber vermutlich lauert das lauert das Problem also nur)
- PropEditor.PromptForXYZPropertiesSettings erstellt und zeigt ein Formular an. Wenn ich den ShowModal-Aufruf deaktiviere, wird der wird der Speicher nicht gelöscht. Auch wenn ich alle Steuerelemente und Code aus dem Formular aus dem Formular
Ich hätte also gerne einen Rat, wie man das Problem beheben kann. Ich dachte, vielleicht beobachten die Speicher-Zeiger, wo die sFilename var vorhanden ist, um zu sehen, wo es gelöscht wird, aber nicht sicher, wie ich das tun würde (offensichtlich muss innerhalb der app getan werden, so ist Speicher im Besitz).
Danke