Ich hätte aber eine andere Idee. Schön wäre es, wenn der Compiler es hinkriegen würde, den Pointer eines freigegebenen Objektes so lange nicht neu zu belegen, bis es keine Referenz mehr auf diesen Pointer gibt. Ein free sollte den Pointer mit der Adresse eines TDestroyedObject belegen, der dann eine "schöne
Exception" erzeugt und keine nichtssagende Schmutzverletzung. Ein Zugriff auf NIL sollte auch mit einer besseren Fehlermeldung belegt werden.
Das gibts schon und nennt sich FastMM FullDebug oder LeakCheck als memory Manager ersatz während der Entwicklung.