Zitat von
tommie-lie:
Dann kannst du später mit einer if-Abfrage überprüfen ob der PChar noch gültig ist. Wenn du das in deinem gesamten Programm konsequent durchziehst, kann man pauschal die Aussage treffen: Alle PChars, die nicht nil sind, verweisen auf einen gültigen Speicherbereich. Solche Aussagen können sich irgendwann mal als praktisch erweisen.
Man sollte vllt. in dem Sinne noch darauf hinweisen, wenn ein lokaler AnsiString mit einem Typecast zu einem PChar gewandelt wird, weil dann wird der PChar mit verlassen der Procedure ungültig (mit dem AnsiString, auf den er halt zeigt). Dies ist in dem Falle zu beachten, dann kann man beim konsequenten zurücksetzen von deiner Aussage ausgehen. (PChar als Funktionsergebnis, etc)
Zitat von
mumu:
ja es ist schon klar, natürlich wird davor mit GetMem Speicher angefordert.
Da es aber viele Möglichkeiten gibt und es auch andere Speicherreservierungen als GetMem() gibt, ist nicht immer FreeMem() richtig, daher habe ich mich nicht zu der grundlegenden Aussage hinreissen lassen, dass FreeMem() richtig ist. Hättest du GetMem() in dem Kurz-Pseudo-Code mit hingeschrieben, hätte ich das bestätigt.
Man muss halt genau sein, sonst heisst es ein halbes Jahr später wieder: "Aber du hattest doch geschrieben ..." und man stellt mit Entsetzen fest, es war nicht eindeutig formuliert bzw. derjenige denkt nicht an das an was ich damals dachte...