[Falsch-Verwendung] Parameter-Übergabe: String

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 »

Mit CopyMemory kopierste ja nur den Zeiger zu dem String, welcher nach
DeleteElement ja nicht mehr gültig sein muß. Nimm Fixstrings, dann sollte
es gehen. Es funktioniert ja nur manchmal, weil der Stringbuffer ja nicht
immer sofort überschrieben wird.
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: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Stimme ts-soft zu.
Falscher Umgang mit Strukturen, Pointer und Strings.

Wer mit Strukturen und Pointer arbeiten möchte , gibt es von Freak ein sehr gutes Tutorial über Pointer.

http://freak.purearea.net/help/help.html

Variablen als Strings sind Pointer und es werden die Speicherbereiche bei DeleteElement(...) freigeben.
Bei Strukturen mit String und Speicheranforderung mit AllocateMemory und FreeMemory sind noch einige Sachen zu beachten.
Bei falscher Anwendung führt dieses zu einem Speicherleck.

http://www.purebasic.fr/german/viewtopi ... eicherleck

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

ts-soft hat geschrieben:Mit CopyMemory kopierste ja nur den Zeiger zu dem String, welcher nach
DeleteElement ja nicht mehr gültig sein muß.
Warum/Wann wird der String gelöscht? Es wird doch gar nicht angegebn, das der String-Buffer freigegeben werden soll.

Wenn ich das Struktur-Element 'Token\sValue' als Pointer erstelle, funktioniert alles. Warum?
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 »

>> Warum/Wann wird der String gelöscht?
Weil Du das Element löscht, dann wird aufgeräumt, manchmal sofort, manchmal später :mrgreen:
Normalle Strings werden nur als Pointer gespeichert, also wird mit
CopyMemory auch nur der Pointer copiert. Ansonsten mußte Dir den
Stringbuffer extra kopieren oder besser Fixstrings verwenden, die befnden
sich tatsächlich dort, wo du sie vermutest :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
Little John

Beitrag von Little John »

Ich finde der Titel dieses Threads sollte geändert werden. Das Wort "Bug" sollte nicht darin vorkommen (kann z.B. durch "Problem" ersetzt werden).
So wie es z.Z. ist, ist es sehr irreführend, und vor allem dazu geeignet PB-Benutzer zu verunsichern! Unbegründet und unnötig zu verunsichern, denn ein Bug in PB konnte ja keineswegs aufgezeigt werden.

Gruß, Little John
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 »

Hab den Titel mal angepaßt. Wir Wissen ja wo der Bug saß :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
Little John

Beitrag von Little John »

Danke, das ging ja schnell. :)

Gruß, Little John
Gesperrt