OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Beitrag von stevie1401 »

OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Code: Alles auswählen


  Procedure ErrorHandler()
    MessageRequester("OnError Test", "Der folgende Fehler trat auf: " + ErrorMessage())
  EndProcedure

  MessageRequester("OnError Test", "Test starten")

  OnErrorCall(@ErrorHandler())
  ;PokeS(10, "Hello World") ; verursacht einen #PB_OnError_InvalidMemory Fehler
  
  Dim a(10)
  For i=1 To 20  ;Speicherüberlauf
    a(i)=i
  Next i
  
  
  
  MessageRequester("OnError Test", "Dies sollte niemals angezeigt werden")
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Beitrag von dige »

Mach mal For i=1 To 2000 ;Speicherüberlauf
"Papa, ich laufe schneller - dann ist es nicht so weit."
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Beitrag von stevie1401 »

Danke für den Tip, damit scheint es zu funktionieren.
Nur hilft mir das nicht ernsthaft weiter.
Wenn mein Programm abstürzt, weil ich ein Array zu klein dimensioniert habe, dann muss ich das auch wissen, wenn es nur um 1 zu klein ist.

Aber ok, erst mal vielen Dank für die Info :)
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Beitrag von jacdelad »

ArraySize() ist dein Freund. Aber Vorsicht, es ist etwas Tricky, weil, anders als bei Listen, is das Ergebnis, das letzte Element. Wenn also 5 rauskommt, dann hat dein Array Elemente von 0 bis 5, also insgesamt 6. Funktioniert wie bei Dim.
https://www.purebasic.com/german/docume ... ysize.html
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Beitrag von dige »

@stevie: dafür ist aber eigentlich der Debugger da und der erkennt ja auch schon den (kleinen) Array-Überlauf. OnErrorCall() ist ja eher für das fertige compilierte Programm.
Du kannst da aber noch mit PurifierGranularity(1, 1, 1, 1) nachschärfen. Damit wird nach jeder Codezeile geprüft. Damit finde ich meist auch kleinere Lecks..
"Papa, ich laufe schneller - dann ist es nicht so weit."
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Beitrag von stevie1401 »

Ich danke euch :)
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Antworten