Bug: *s.STRING mit leerem Inhalt und ValQ(*s\s)

Fragen und Bugreports zur PureBasic 4.0-Beta.
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

Beitrag von ts-soft »

@AND51
Was hat der Verweis damit zu tun, da gabs kein NOT
Du ziehst laufend Rückschlüsse, die nicht schlüssig sind :freak:
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
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Sauber wäre zu prüfen der Pointer auf eine String auch Initialisiert ist.

if *s
x = val(*s)
else
x = 0
endif

FF :wink:

P.S. Einen Pointer auf eine String sollte immer genügend speicher reserviert werden. Auf eine Adresse mit eine Variable von Type Long zu verweisen und dann zu glauben es geht einfacher als mit AllocateMemory(...) hat dann natürlich Probleme mit sein Speichermangment.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Worüber wird noch diskutiert? Der Bug ist eindeutig, auch ohne Pointer:

Code: Alles auswählen

s.s
Debug ValQ(s)
NicTheQuick hat Recht, auch eine Überprüfung fehlt in ValQ() etc. und
das Schnellste wäre

Code: Alles auswählen

*s.String
If *s
;String da
Endif
P.S. Einen Pointer auf eine String sollte immer genügend speicher reserviert werden. Auf eine Adresse mit eine Variable von Type Long zu verweisen und dann zu glauben es geht einfacher als mit AllocateMemory(...) hat dann natürlich Probleme mit sein Speichermangment.
falsch
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

remi_meier:
Danke!
Endlich jemand, der's kapiert.

Nur deine Überprüfung ist falsch. So ist's richtig:

Code: Alles auswählen

*s.String = AllocateMemory(4)

If *s;\s
  Debug ValQ(*s\s)
Else
  Debug 0
EndIf
Mach das Kommentarzeichen weg, dann funktioniert es.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ach Mist :D
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

@NTQ:

Das ist ganz schön Tricky, mit dem Stringpointer auf ne 0-Variable.

/halb-off-topic:

Wie sieht es eigentlich intern bei PB mit der Stringverwaltung aus? Wann wird welcher String wieder freigegeben und unter welchen Bedingungen?
Optimismus ist ein Mangel an Information.
Gesperrt