Ich kann nur den Rat geben
niemals Variablen oberhalb von Unterroutinen einer Methode zu deklarieren. Das führt nur zu Konfusionen. Man sollte die benötigten Variablen an Unterroutinen immer direkt mitgeben.
Sprich statt:
Delphi-Quellcode:
procedure Test;
var
Dingliste:TDingliste;
procedure HierKnallts;
begin
Dingliste.add(Ding);
// Access Violation
end;
begin
...
HierKnallts;
end;
Besser:
Delphi-Quellcode:
procedure Test;
procedure HierKnallts(ADingliste: TDingliste);
begin
ADingliste.add(Ding);
end;
var
Dingliste: TDingliste;
begin
...
HierKnallts(Dingliste);
end;
So kann man viel leichter debuggen was da wo schief geht...
Die Routine "HierKnallts" ist eine Callback-Routine, deren aufrufende Routine von einer weiteren Unterprozedur von "Test" aufgerufen und mit @HierKnallts übergeben wird.
Obwohl man im Debugger die Variable ohne weiteres sieht, erinnere ich mich, dass es da mit der Sichtbarkeit Probleme gab. Daher funktioniert auch die globale Variable.
Wenn es Probleme mit der Sichtbarkeit gäbe, würde es nicht kompilieren. Alles andere was mit Sichtbarkeit zu tun hat, würde nur zu dem Problem führen, wenn es irgendwo eine zweite gleichnamige Variable geben würde.