Seite 1 von 1

betrifft Parsedate()

Verfasst: 13.02.2014 00:52
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

Re: betrifft Parsedate()

Verfasst: 13.02.2014 01:54
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.

Re: betrifft Parsedate()

Verfasst: 13.02.2014 02:03
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.

Re: betrifft Parsedate()

Verfasst: 13.02.2014 10:57
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:

Re: betrifft Parsedate()

Verfasst: 13.02.2014 11:25
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.

Re: betrifft Parsedate()

Verfasst: 13.02.2014 19:20
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$)

Re: betrifft Parsedate()

Verfasst: 13.02.2014 22:19
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

Re: betrifft Parsedate()

Verfasst: 14.02.2014 07:33
von Danilo
Bugmeldung im englischen Forum:
- [PB 5.21, Win + Mac] ParseDate IMA with NULL string

Re: betrifft Parsedate()

Verfasst: 14.02.2014 11:49
von NicTheQuick
Der Fehler tritt auch unter Linux auf.