Bug: IMA in ClearList() nach AddElement() in Prozedur

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Is ja gut /:->
Immer auf die kleinen ...
Naja in dem Beispiel oben isses wirklich nicht so tragisch ...
Und wenn ihr wirklich recht habt (wovon man wohl ausgehen muss :lol:),
ist es gut zu wissen. Sollte nur in dem Fall mal in die Hilfe explizit
erwähnt werden. *andre pn schreib* :D

@#Null ... ja an Macros hab ich auch schon gedacht, werd ich für
kompliziertere Projekte dann vermutlich auch nutzen müssen.

Ach ja, noch danke für alle für die Info^^

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Und Pointer dürfen in StructureUnion auch nicht genutzt werden?

Code: Alles auswählen

Structure PMV_PreferenceLine
  Typ.b    ;0 = Group ;1 = Key + Value ; 2 = Commend
  Name.s   
  StructureUnion
    Value.s  
    *NextGroup
  EndStructureUnion
EndStructure
gibt wieder fehler in ClearList() aus -.-

Code: Alles auswählen

Structure PMV_PreferenceLine
  Typ.b    ;0 = Group ;1 = Key + Value ; 2 = Commend
  Name.s   
  StructureUnion
    Value.s  
    NextGroup.l
  EndStructureUnion
EndStructure
klappt^^

... ich mach auch wieder nen kleines beispiel. Bin dranne. Es sei denn
einer von euch bestätigt, das Pointer auch verboten sind -.-

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Bitte kompletten Code.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
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 »

Structure Union macht doch im Endeffekt nichts anderes, als den Pointer zur
übergebenen Variable zu speichern. (also lediglich die Konvertierung zum
Pointer, wenn nötig). Je nach abruf wandelt er den Pointer wieder in den
Wert. (nicht Wissen, aber logische Spekulation :mrgreen: )

Pointer würden keinen Sinn machen.
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
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 »

Fällt mir gerade ein, Fixstrings sind ein anderer Datentyp

Code: Alles auswählen

;ab PB 4.0 (PB4.01 hab ich net ;-) )
Structure Struc
  StructureUnion
    String1.s
    String2.s{255}
  EndStructureUnion
EndStructure
Global NewList List.Struc()

Procedure Add(String.s)
   AddElement(List())
   List()\String1 = String
EndProcedure
Add("Key")
ClearList(List()) ;-No ERROR!!!
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
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

bin doch dabei :D

Code: Alles auswählen

Structure Struc
  StructureUnion
    Value.s  ;mit einem anderen Datentyp kein problem
    *Pointer
  EndStructureUnion
EndStructure
Global NewList List.Struc()

Structure Struc2
  *Pointer
EndStructure
Global Variable.Struc2

For i = 0 To 1 ;muss mindestens 2 mal durchlaufen werden
  AddElement(List()) ;es müssen min. 2 Elemente erstellt werden
  AddElement(List())
  Variable\Pointer = @List() ;mit einfacher Pointervariable kein problem o_O
  PreviousElement(List()) ;es muss mindestens 2 Felder zurück gehen O_o
  PreviousElement(List()) ;FirstElement(List()) bringt auch ein IMA
  List()\Pointer = Variable\Pointer
  ChangeCurrentElement(List(), Variable\Pointer)
Next
ClearList(List()) ;-Error
Aber moment, ts-soft hat doch recht ... klar -.-
der String ist ja nix anderes als ein Pointer, setzte ich nun den Wert
des Pointer-Strukturfeldes, verbieg ich gleichzeitig den Pointer für den
String. Somit versucht ClearList() nun speicher frei zu geben, der
garnicht zum programm gehört. Danke ts ... *gegenwandlauf*

Also, keine Pointer mit Strings in StructureUnion ...

Fixed Strings ... ne ... da hat PB4 mir auch mal probleme gemacht.
Bevor ich die wieder nutze, werd ich erst schauen, ob der damalige Code
immer noch ein "Error" auswirft und wenn ja, mich damit mal genauer
beschäftigen. Aber mal davon abgesehen wäre das zu viel
Speicherverschwendung, trotzdem danke :D

Edit: muss mich korrigieren :? ... das Beispiel funktioniert auch mit
Long-Variable anstelle des Pointers nicht :cry:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

PMV hat geschrieben:Edit: muss mich korrigieren :? ... das Beispiel funktioniert auch mit
Long-Variable anstelle des Pointers nicht :cry:
MFG PMV
HAst Du schon mal daran gedacht...dass Du an anderere Stelle einen Fehler drinnen hast?

Tausche mal

Code: Alles auswählen

 List()\Pointer = Variable\Pointer 
mit

Code: Alles auswählen

 List()\Pointer = @List()
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

ne, hab ich nicht ... ich mach doch keiner fehler :? ... /:->
Natürlich hab ich drann gedacht :D, aber das Beispiel oben ist die
gekürzte Version meines Codes im Projekt ... nur mit anderen
Bezeichnungen.

Ein List()\Pointer = @List() ergibt keinen sinn, warum sollte ich den Zeiger
des aktuellen Elements in sich selber speichern wollen? Denn kann ich
doch dann auch mit @ aufrufen wenn das Element eh schon aktiv ist.
Ne, es soll dort der Zeiger zu einem anderen Element gespeichert werden.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Versuch doch mal das hier...vieleicht verstehst Du es dann besser.

Code: Alles auswählen

Structure Struc 
  StructureUnion 
    Value.s  ;mit einem anderen Datentyp kein problem 
    *Pointer 
  EndStructureUnion 
EndStructure 
Global NewList List.Struc() 

Structure Struc2 
  *Pointer 
EndStructure 
Global Variable.Struc2 

For i = 0 To 1 ;muss mindestens 2 mal durchlaufen werden 
  AddElement(List()) ;es müssen min. 2 Elemente erstellt werden 
  AddElement(List()) 
  Debug "Zeigeradresse: " + Str(@List()) 
  Variable\Pointer = @List() ;mit einfacher Pointervariable kein problem o_O 
;   PreviousElement(List()) ;es muss mindestens 2 Felder zurück gehen O_o 
;   PreviousElement(List()) ;FirstElement(List()) bringt auch ein IMA 
  Debug "Zeigeradresse: " + Str(Variable\Pointer) 
  List()\Pointer = Variable\Pointer 
  ChangeCurrentElement(List(), Variable\Pointer) 
  Debug "" 
Next

ClearList(List())
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Das ist der Code, den ich dir grad per PN geschickt hatte ... mit
auskommentieren PreviousElement(). Aber ich versteh nicht, was du mir
sagen willst. Sorry :oops:
Die Debug-Werte sind immer noch ok?

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten