Statische Strings nicht ReadOnly

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

ts-soft hat geschrieben:Bild

Hab den Thread in der Lounge nicht gelesen und werde es auch nicht tun.

Code: Alles auswählen

Define *p.Character = @"Test"

Debug "Test"
*p\c = #Null
a.s = "Test"
Debug a
Dies ist in meinen Augen ein Bug.
Ich speichere "Test" in der Stringvariablen a und es ist nicht da. Der
vorherige Code darf auf die Zeile a.s = "Test" keinerlei Auswirkung haben

Gruß
Thomas
Bei kommt es zu keinen Fehler. Der Debugger gibt "Test" aus. XP-SP3

Zu Pointern.
Wer mit Pointern arbeitet sollte wissen was er tut. Für Bereichscheck und gültige Pointer ist der Programmierer selber für verantwortlich und nicht der Compiler. Dieses sollte auch so bleiben und nicht durch den Compiler eingeschränkt werden.

Dieses ist meine Meinung
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

> Bei kommt es zu keinen Fehler. Der Debugger gibt "Test" aus. XP-SP3
Der Debugger müsste aber 2* Test ausgeben. Bei dem Code ist es deutlicher:

Code: Alles auswählen

Define *p.Character = @"Test"

Debug "Da müsste Test stehen :" + "Test"
*p\c = #Null
a.s = "Test"
Debug "Da müsste Test stehen :" + a
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
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 »

> Bei kommt es zu keinen Fehler. Der Debugger gibt "Test" aus. XP-SP3
Sicher das er 2x Test ausgibt?

Weder mit x86, x64 oder mit PB4.20 kommt bei mir unter Vista 2x Test

Das darf nicht sein!
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: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

"Define *p.Character = @"Test" " ist kein String

Code: Alles auswählen

Define *p = @"Test"

Debug "Test"
PokeS(*p, "stop" ,4)
a.s = "Test"
Debug a
Ist irgendwie komisch
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
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 »

> Ist irgendwie komisch
Na, wenn das kein Bug ist

Kann das mal jemand im engl. melden, der ein bissel englisch kann?
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
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

Wenn Fred oder wer auch immer dafür zuständig ist

diesen Code sieht
Define *p = @"Test"

Debug "Test"
PokeS(*p, "stop" ,4)
a.s = "Test"
Debug a
dann fragt er sich zu Recht, wo ist hier der BUG ???

völliger Unsinn der Code :mrgreen:
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
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

hjbremer hat geschrieben:Wenn Fred oder wer auch immer dafür zuständig ist

diesen Code sieht
Define *p = @"Test"

Debug "Test"
PokeS(*p, "stop" ,4)
a.s = "Test"
Debug a
dann fragt er sich zu Recht, wo ist hier der BUG ???

völliger Unsinn der Code :mrgreen:
Der Code ist kein Unsinn sondern das Verhalten des Compilers. Man kann nicht alles auf den Programmierer schieben und sagen, sowas machst man nicht. Wenn ich schreibe a.s = "Test" erwarte ich auch das dann "Test" drinsteht.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

Ist kein Bug.

@"Test" gibt die Position des statischen "Test" strings zurück. Den gibt es in der Exe nur einmal (wäre ja auch Unsinn X mal die gleiche Bytesequenz in die Exe zu schreiben).
Wenn man den ändert dann hat man alle "Test" Strings geändert. Ist irgendwie logisch.

Wenn man den String einer Variable zuweist bekommt man eine Kopie und kann die manipulieren wie man will. String literale sind nicht zum manipulieren gedacht.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

hmm vllt Bietet das ja völlig neue Möglichkeiten der Multi-Sprach Anwendungen:

So könnte man den Ganzen Code in seiner Sprache schreiben also mit normalen Strings wie:
"Einzelspieler", usw.

und wenn dann jemand die Sprache Umstellt werden einfach die Strings "geändert"

Somit entfallen die Variable oder Konstanten für Texte , welche in verschiedenen Sprachen sein sollen (ist damit vllt übersichtlicher)

Am anfang müsste man halt nur alle Texte in einer LL speichern, und dann eine alternative Sprachliste "drüberladen"

Also KEIN BUG, sondern einer potentialbehaftete neuigkeit ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

freak hat geschrieben:Ist kein Bug.

@"Test" gibt die Position des statischen "Test" strings zurück. Den gibt es in der Exe nur einmal (1) (wäre ja auch Unsinn X mal die gleiche Bytesequenz in die Exe zu schreiben).
Wenn man den ändert dann hat man alle "Test" Strings geändert. Ist irgendwie logisch.

Wenn man den String einer Variable zuweist bekommt man eine Kopie und kann die manipulieren wie man will. (2) String literale sind nicht zum manipulieren gedacht.
Zum 1: geb ich dir recht, alles andere währe Unsinn.
Zum 2: Dann sollte man das ganze ReadOnly machen, dann kriegt man eine Fehlermeldung und kann sowas erst gar nicht machen.

@Stargate: Wird nicht gehen.
Wenn du jetzt z.B. "Test" überschreibst kannst du nur 4 Zeichen überschreiben. Wenn du jetzt z.B. "Player" als String hast und überschreibst ihn mit "Spieler" steht da nur "Spiele" und das "r" rutsch irgendohin und du hast den nächsten Speicherfehler/veänderst irgendwas.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Antworten