Fälle von fehlender (oder fehlerhafter) Syntaxprüfung

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Fälle von fehlender (oder fehlerhafter) Syntaxprüfung

Beitrag von STARGÅTE »

Ich weiß nicht ob das hier hin gehört,
aber wenn man zB eine leere Struktur definiert,
und dann eine Struktur definiert die diese enthält und eine LinkedList,
dann wird die Liste nicht mehr initiallisiert:

Code: Alles auswählen

Structure Nothing

EndStructure

Debug SizeOf(Nothing)

Structure Test
 Nothing.Nothing
; Float.f
 List Long.l()
EndStructure

Debug SizeOf(Test)

Test.Test
AddElement(Test\Long())
Nur wenn ich noch etwas zwischen "Nichts" und der List definiere gehts wieder.
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
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Fälle von fehlender (oder fehlerhafter) Syntaxprüfung

Beitrag von CSHW89 »

Hab auch nochmal zwei kleine Sachen entdeckt.
Das erste ist vermutlich ein Easter Egg :lol:

Code: Alles auswählen

Procedure test(List a.i(, b)
EndProcedure
Falls es jemand nicht auffällt, zählt mal die Klammern. Naja is nich weiter tragisch.

Das zweite, find ich, is schon gravierender. Anscheinend kann man auf Array's zugreifen, ohne die Dimension anzugeben:

Code: Alles auswählen

Dim a.i(4,4)
Debug a()
Debug @a(0,0)
Dadurch gibt man die Adresse des ersten Feldes zurück. Muss es ja auch geben, wegen ArraySize(). Das Problem ist, dass man auch eine Zuweisung durchführen kann, die erst beim nächsten Zugriff auf das Array zu einem Laufzeitfehler führt:

Code: Alles auswählen

Dim a.i(4,4)
a() = 2
Debug a(0,0)
lg kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Fälle von fehlender (oder fehlerhafter) Syntaxprüfung

Beitrag von STARGÅTE »

Na ich hoffe das "a() = 2" noch länger geht ^^

Nur so kann man "noch schneller" ein Array aus dem Speicher holen:

Code: Alles auswählen

Dim a.w(0)
a() = ?ArrayFromDataSection
Debug a(3)
Debug ArraySize(a())

DataSection
Data.i 1 ; True (for ArraySize)
Data.i 2 ; Structure Size
Data.i 0 ; Null, no substructure
Data.i ?ArrayFromDataSection ; Address to data 
Data.i 5 ; count fields
Data.i 3 ; field type: word
ArrayFromDataSection:
Data.w 0,11,22,33,44
EndDataSection
Ne spaß, es geht ja bedeutend einfacher mit einem Static-Structure-Array, und einen Pointer auf die DataSection ..
Aber interessant ist es trotzdem ^^
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
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Fälle von fehlender (oder fehlerhafter) Syntaxprüfung

Beitrag von CSHW89 »

STARGÅTE hat geschrieben:Na ich hoffe das "a() = 2" noch länger geht ^^

Nur so kann man "noch schneller" ein Array aus dem Speicher holen:

Code: Alles auswählen

Dim a.w(0)
a() = ?ArrayFromDataSection
Debug a(3)
Debug ArraySize(a())

DataSection
Data.i 1 ; True (for ArraySize)
Data.i 2 ; Structure Size
Data.i 0 ; Null, no substructure
Data.i ?ArrayFromDataSection ; Address to data 
Data.i 5 ; count fields
Data.i 3 ; field type: word
ArrayFromDataSection:
Data.w 0,11,22,33,44
EndDataSection
Ne spaß, es geht ja bedeutend einfacher mit einem Static-Structure-Array, und einen Pointer auf die DataSection ..
Aber interessant ist es trotzdem ^^
:lol: GENIAL :lol:
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Fälle von fehlender (oder fehlerhafter) Syntaxprüfung

Beitrag von CSHW89 »

Ok hab nochwas, zu StructureUnion:

Code: Alles auswählen

Structure MyStruc
  StructureUnion
    Array int.i(12)
    Array str.s(12)
  EndStructureUnion
EndStructure
Also entweder ist es so, dass zwei Arrays erstellt werden, und das eine dann verschwindet, ohne freigegeben zu werden. Oder zweite Möglichkeit, der Compiler merkt das und erstellt nur eins. Beim Freigeben kann er dann aber nicht wissen, ob die Elemente nun Integer oder Strings sind. Dadruch könnten auch Speicherlecks entstehen.

lg kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Antworten