Ich bin eigentlich gewöhnt eine Zugriffsverletzung zu bekommen wenn man einen Nullzeiger dereferenziert. Ich habe hier bei einer Anwendung folgenden Stack:
Code:
Der.schöne.Günther.getMode
Der.schöne.Günther.HandleTimer($7F180520)
Vcl.ExtCtrls.TTimer.Timer
Vcl.ExtCtrls.TTimer.WndProc(???)
System.Classes.StdWndProc(987140,275,1,0)
:74d948eb user32.AddClipboardFormatListener + 0x4b
:74d7613c ; C:\WINDOWS\SysWOW64\user32.dll
:74d7528e ; C:\WINDOWS\SysWOW64\user32.dll
:74d75070 user32.DispatchMessageW + 0x10
Vcl.Forms.TApplication.ProcessMessage(???)
Ein
Vcl-Timer ruft eine Methode auf, diese Methode sieht so aus:
Delphi-Quellcode:
function TGünther.getMode(): TGüntherMode;
begin
Result := TGüntherMode.unknown;
case someReference.someInteger of
123: Result := TGüntherMode.Romantisch;
456: Result := TGüntherMode.Draufgängerisch;
end;
end;
Die Variable
someReference
ist eindeutig
nil
. Das sagt auch der Debugger. Trotzdem sagt mir der Debugger auch ohne zu Murren was
someReference.someInteger
sein soll. Die eigentliche Anwendung auch, sie läuft ohne Probleme durch das case-Statement.
Warum ist das so? Wie kann das sein? Und wie bekomme ich so etwas nachgestellt? In einem neuen Projekt bekomme ich erwartungsgemäß eine
AV.