Seite 2 von 2

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

Verfasst: 06.02.2011 21:14
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.

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

Verfasst: 19.03.2011 02:54
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

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

Verfasst: 19.03.2011 03:51
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 ^^

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

Verfasst: 19.03.2011 04:27
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:

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

Verfasst: 01.04.2011 13:32
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