Laufzeitfehler dynamisches Array

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Matze66
Beiträge: 2
Registriert: Mo 15. Mär 2021, 14:09
OS, Lazarus, FPC: Lazarus-Ide 2.0.0 auf Debian Raspberry Pi3
CPU-Target: Arm

Laufzeitfehler dynamisches Array

Beitrag von Matze66 »

Moin.

Ich nutze Lazarus auf einem Raspberry 3.

Problem:
Beim Auslesen der Wetterdaten von Openweathermap (Json-formatiert) werden die Daten alle korrekt aufgelistet.
Die ausgelesenen Felder bzw. die Abfragen in einer Schleife sind jeweils identisch, bis auf Ereignisse wie z. B. Regen oder Schnee, die nur sporadisch auftreten. somit ist auch kein Feld mit solch einem Wert existent.
Trifft nun die Abfrage auf solch ein nicht vorhandenes Feld, wird als Fehler folgendes ausgegeben:
Projektsteuerung hat Exception-Klasse »External: SIGSEGV« ausgelöst.
In Datei 'xxx.pas' in Zeile 717: Wind := jData.FindPath('list['+IntToStr(Schleifenzaehler)+'].rain.3h').AsString;

Da der Fehler sofort auftritt, klappt eine Fehlerroutine nicht, da wohl der Pointer nicht initialisiert wird.
Der Versuch mit try und except schlägt fehl, gleiche Meldung.
Abfrage auf nil klappt nicht (if nil usw.).

Gibt es eine Lösung dafür?

Ich bin leider nicht so firm mit der Syntax von Pascal, eher mit C.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 845
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Laufzeitfehler dynamisches Array

Beitrag von fliegermichl »

Doch, der Vergleich mit nil muß gehen weil findpath eben diesen zurückgibt, falls der gesuchte Pfad nicht gefunden wurde. Du musst den nur auch prüfen bevor du darauf zugreifst.

Code: Alles auswählen

 if Assigned(jData.FindPath('list['+IntToStr(Schleifenzaehler)+'].rain.3h')) then
  Wind := jData.FindPath('list['+IntToStr(Schleifenzaehler)+'].rain.3h').AsString;

Matze66
Beiträge: 2
Registriert: Mo 15. Mär 2021, 14:09
OS, Lazarus, FPC: Lazarus-Ide 2.0.0 auf Debian Raspberry Pi3
CPU-Target: Arm

Re: Laufzeitfehler dynamisches Array

Beitrag von Matze66 »

Danke.

"Assigned" hatte mir gefehlt, klappt.

Antworten