Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Anwendung dereferenziert Nullzeiger, keine Exception

  Alt 8. Okt 2019, 19:02
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.
  Mit Zitat antworten Zitat