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

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

Beitrag von PMV »

Folgender Code gibt einen "invalid memory acces" in der Zeile ClearList().
Das passiert nur zusammen mit StructureUnion und einer Prozedur wie
hier. Wird das selbe ohne Prozedur oder StructureUnion gemacht, klappts.

Code: Alles auswählen

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

Procedure Add(String.s)
   AddElement(List())
   List()\String1 = String
EndProcedure
Add("Key")
ClearList(List()) ;-ERROR!!!
PS: wäre nett, wenn das jemand Fred melden könnte. Und natürlich
dann hier bescheid sagen. Möchte ja auch auf dem laufenden sein :D

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 »

Lies Dir mal GENAU die Hilfe zu StructureUnion durch.

Der Fehler liegt bei Deinen Verständnis zu StructureUnion.
...allerdings eine Compiler Warning wäre möglicherweise sinnvoll.


Bei der Gelegenheit:
Wann wird das 'Beta' aus 'PureBasic 4.0 Beta' entfernt?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

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

Beitrag von Kaeru Gaman »

PMV hat geschrieben:;ab PB 4.0 (PB4.01 hab ich net ;-) )
hast du nun 4.02, oder krebst du mit 4.00 rum? :?

bei mit tritt der IMA auch auf, allerdings mag das wirklich an der unsachgemäßen verwendung der Union liegen.
bei sachgemäßer verwendung tritt kein IMA auf:

Code: Alles auswählen

Structure Struc 
  StructureUnion 
    String1.s 
    String2.l 
  EndStructureUnion 
EndStructure 
Global NewList List.Struc() 

Procedure Add(String.s) 
   AddElement(List()) 
   List()\String1 = String 
EndProcedure 
Add("Key") 
ClearList(List())
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

"ab" schließt PB 4.0 bis heute ein :wink:
Lies Dir mal GENAU die Hilfe zu StructureUnion durch.
*den zweizeiler noch mal durchles*

Da steht lediglich, das man "einige Felder innerhalb derselben Struktur
teilen" kann ... es steht nichts davon, das es nicht auch der selbe
Datentyp sein darf. Zudem das ganze in 3.92/ 3.93/ 3.94 funktioniert.
Ich denke ja wohl mal, das durch StructureUnion die Structurefelder
intern einfach nur auf die selbe Speicheradresse zeigen. Das es da nicht
mit gleichen Datentypen funktioniert erscheint mir was unlogisch. Was
gibt es da, was ich nicht weis?

StructureUnion hat für mich diesen vorteil gehabt ... wodurch Quellcode
wesentlich lesbarer wurde :cry: . ... mist. Dann müsste ich die Zeiger ja
selber umbiegen o_O ... oder mehr Kommentieren, aber beides nicht so
schön. -.-
Wann wird das 'Beta' aus 'PureBasic 4.0 Beta' entfernt?
Wenn PB das Beta-Statium verlässt? :lol:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ich versteh' nicht richtig wobei das sinn machen soll. wieso willst du denn zwei verschiedene bezeichner für den selben speicher benutzen (und der bezeichner ist hier doch das einzige, was sich unterscheiden würde)?
my pb stuff..
Bild..jedenfalls war das mal so.
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

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

Beitrag von ts-soft »

PMV hat geschrieben:

Code: Alles auswählen

;ab PB 4.0 (PB4.01 hab ich net ;-) )
Structure Struc
  StructureUnion
    String1.s
    String2.s
  EndStructureUnion
EndStructure
Ohne genauer zu schaun, ist diese Structure sinnlos!
String1.s und String2.s belegen denselben Speicherbereich. Es ist egal ob ich
jetzt String1 oder Strings2 schreibe, es wird immer derselbe Bereich
überschrieben :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
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Jap, der Bezeichner ist der einzige unterschied. Dient zur Lesbarkeit :wink:
hier hab ich Quellcode, wo ichs benutze (so bin ich ja aufs problem gestosen ^_^ )
http://www.purebasic.fr/german/viewtopic.php?t=12104

Natürlich gehts auch ohne ... aber ich hab lieber Aussagekräftige
Variablen(Strukturfeld-)namen :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

also ich finde es nicht lesbarer oder übersichtlicher, walweise 'küche' oder 'schlafzimmer' zu sagen, wenn ich das klo meine.
my pb stuff..
Bild..jedenfalls war das mal so.
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 »

Aber es geht nur eine Variable je Typ. Ändere String2.s in String2.l und alles ist Roger :wink:
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
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ansonsten kannste auch sowas nehmen. <)

Code: Alles auswählen

Macro Group
  Value
EndMacro

Macro Key
  Value
EndMacro

Macro Comment
  Value
EndMacro



Structure myS
  Typ.b

  Value.s
; StructureUnion
;   Group.s
;   Key.s
;   Comment.s
; EndStructureUnion
EndStructure
strctdVar.myS

strctdVar\Group = "my group"

Debug strctdVar\Group
Debug strctdVar\Key
Debug strctdVar\Comment
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten