betrifft Parsedate()

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

betrifft Parsedate()

Beitrag von hjbremer »

ich finde folgender Code ist ein "Bug"

Code: Alles auswählen

#datemasklist = "%dd.%mm.%yyyy"
;suchbis$ = ""
suchbisdatum = ParseDate(#datemasklist, suchbis$)
es kommt 'ungültiger Speicherzugriff'

wenn man das Rem entfernt gibt es keinen Error

Version 5.21 LTS x86 Windows Vista
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: betrifft Parsedate()

Beitrag von ts-soft »

Der nicht initialisierte String ist null, der andere ein Leerstring (und das ist auch richtig und wichtig).

Bug ja, aber IMHO nicht sooo wichtig.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: betrifft Parsedate()

Beitrag von NicTheQuick »

Der Fehler tritt auch in einer EnableExplicit-Umgebung auf:

Code: Alles auswählen

EnableExplicit
#datemasklist = "%dd.%mm.%yyyy"
Define suchbis.s
ParseDate(#datemasklist, suchbis.s)
Also ich finde jeder Bug ist wichtig. Und so welche hier sind auch echt hässlich zu finden.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: betrifft Parsedate()

Beitrag von ts-soft »

Wenn man 0 als Adresse übergibts, gibts immer einen IMA, das wird der Compiler wohl nie abfangen.
Aber in diesem speziellem Fall ist das leider nicht für jeden ersichtlich, deshalb sollte der Compiler
schon einschreiten. Will bloß nicht, das die uninitialisierten Strings wieder abgeschafft werden, weil
die braucht man ab und zu :wink:

Ausserdem bin ich mehr der Meinung, das unsinnige Werte bei der Übergabe an Funktionen sind mehr
die Aufgabe des Programmierers. Endanwender werden am Händchen geführt, aber Programmierer? :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: betrifft Parsedate()

Beitrag von Danilo »

ts-soft hat geschrieben:Wenn man 0 als Adresse übergibts, gibts immer einen IMA
Wenn eine (PB-)Funktion auf externe Pointer zugreift, sollte sie auch auf "Pointer = 0" prüfen.
Alles andere nenne ich mal schlechten Programmierstil.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: betrifft Parsedate()

Beitrag von hjbremer »

Danilo hat geschrieben:Wenn eine (PB-)Funktion auf externe Pointer zugreift, sollte sie auch auf "Pointer = 0" prüfen.
Alles andere nenne ich mal schlechten Programmierstil.
Richtig !!!

Nur wegen dieser Macke muß man eine Sicherheitsabfrage einbauen
oder den String initialisieren.

Aber wir sind hier bei Purebasic und nicht in C oder was auch immer.

Folgendes sinnfreies Beispiel gibt ja auch keinen Error

Code: Alles auswählen

Debug StringField("xx,xxx", 1, a$)
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: betrifft Parsedate()

Beitrag von ts-soft »

Andererseits wird man ja erst durch dieses IMA darauf aufmerksam, das der Code so nicht stimmen kann.
Ansonsten wird man diesen Fehler, entweder vergessen den Wert zu setzen oder falsche Variable, ja nie finden.

Und in dem Fall, wo die Variable den String durch eine Usereingabe erhält, da kann die Variable niemals un-
initialisiert sein und Usereingaben sollten immer validiert werden.

Mir ist es eigentlich lieber wenn der Compiler unsinnigen Code entdeckt, als das er den übergeht.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: betrifft Parsedate()

Beitrag von Danilo »

Bugmeldung im englischen Forum:
- [PB 5.21, Win + Mac] ParseDate IMA with NULL string
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: betrifft Parsedate()

Beitrag von NicTheQuick »

Der Fehler tritt auch unter Linux auf.
Bild
Antworten