Seite 1 von 1
Wiederholtes ReDim & befüllen bei 2D-Array erzeugt IMA
Verfasst: 07.06.2007 12:57
von D@nte
Ja ich weiß der Titel is toll, nur is mir keine bessere "Erklärungen" eingefallen.
Also ich hab folgendes Problem (und seh den Wald vor lauter Bäume wahrscheinlich einfach nicht), in meinem Programm füll ich ein 2D-Array und ein ListIconGadget mit Werten aus ner CSV-Datei, so weit kein Thema.
Nur Wenn ich das ListIconGadget und den Counter für die Einträge leere bzw auf 0 setze und alles wieder neu befülle bekomm ich nen IMA.
Hab das ganze mal in nen Beispielcode gepackt der den IMA erzeugt...
Aber irgendwie find ich nit raus woran's liegt
Code: Alles auswählen
Dim entries.s(6,1)
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = listlength - len To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
listlength = 0
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = listlength - len To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Verfasst: 07.06.2007 13:11
von Andreas_S
So vielleicht?
Code: Alles auswählen
Dim entries.s(6,1)
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = listlength - len To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
; listlength = 0
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = listlength - len To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Verfasst: 07.06.2007 13:16
von D@nte
@PBProgger
Ne dann hätt ich ja auch gleich
Code: Alles auswählen
Dim entries.s(6,1)
For k = 0 To 4
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = listlength - len To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
machen können...
Wenn listlength nit auf "0" gesetzt wird beschreibt er mein Array ja nich neu sondern schtreibt an dem letzten Index weiter.
@ts-soft
>Nein, der Fehler tritt auf sobald ein zweiter Block im Spiel ist. Die beiden Blöcke für sich funktionieren ja (sind ja auch identisch)
Irgendwie hilft mir das grad nit weiter bzw bin zu blöd zu kapieren was du mir sagen willst

Verfasst: 07.06.2007 13:23
von ts-soft
D@nte hat geschrieben:
@ts-soft
>Nein, der Fehler tritt auf sobald ein zweiter Block im Spiel ist. Die beiden Blöcke für sich funktionieren ja (sind ja auch identisch)
Irgendwie hilft mir das grad nit weiter bzw bin zu blöd zu kapieren was du mir sagen willst

Fehler meinerseits, habs gelöscht

Verfasst: 07.06.2007 13:27
von Andreas_S
Hm, ist das ein PB bug?
Code: Alles auswählen
Dim entries.s(6,1)
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = listlength - len+1 To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Debug ""
listlength = 0
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = listlength - len+1 To listlength
For j = 0 To 6
Debug "Auf Übers. testen (i): "+Str(i)+" ;i darf bis zu (listlength): "+Str(listlength)
entries(j,i) = Str(i * j)
Next j
Next i
Next k
es wird nichts überschritten...
//Edit:
Hab die Ausgabe ein bischen anschaulicher gemacht...
//Edit:
Ist eigendlich dumm von mir zu glauben das i überschritten wird
kann ja nur dazwischen sein

Verfasst: 07.06.2007 13:54
von D@nte
Bei nem statischen Werten bei len von 44 (len = 44) und drüber tritt der IMA auf bei weniger als 44 nit...
Ich kapier nit wieso...
Verfasst: 07.06.2007 14:09
von Andreas_S
so funzt es auch ist aber blöd:
Code: Alles auswählen
Dim entries.s(6,1)
For k = 0 To 2
len = Random(300)
listlength = listlength + len
Debug listlength
ReDim entries.s(6,listlength)
For i = listlength - len+1 To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Debug ""
listlength = 0
For k = 0 To 2
len = Random(300)
listlength = listlength + len
listlength = 300
ReDim entries.s(6,listlength)
For i = listlength - len+1 To listlength
Debug "Auf Übers. testen (i): "+Str(i)+" ;i darf bis zu (listlength): "+Str(listlength)
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Ich kapiers auch nicht

.
//Edit:

wenn man nur zB 60 verwendet dann funzt es einmal nicht und einmal schon
Code: Alles auswählen
Dim entries.s(6,1)
For k = 0 To 2
len = Random(300)
listlength = listlength + len
Debug listlength
ReDim entries.s(6,listlength)
For i = listlength - len+1 To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Debug ""
listlength = 0
For k = 0 To 2
len = Random(60)
listlength = listlength + len
listlength = listlength + len
ReDim entries.s(6,listlength)
For i = listlength - len+1 To listlength
Debug "Auf Übers. testen (i): "+Str(i)+" ;i darf bis zu (listlength): "+Str(listlength)
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Ihr müsst den Code ein paar mal ausführen. Irgendwann einmal fuzt es

.
Verfasst: 07.06.2007 14:16
von D@nte
Wann löschte den Post jetzt wieder?!
Dein Lösung funktioniert auch nicht den ein
Code: Alles auswählen
len = Random(300)
listlength = listlength + len
listlength = 300
bringt mir rein gar nix, weil mein "2tes" Array dann immer nur 300 Einträge hat, es muss aber immer größer werden
>Ihr müsst den Code ein paar mal ausführen. Irgendwann einmal fuzt es
Nit wirklich effektiv...
[Edit]
Bin noch auf die glorreiche Idee gekommen mit anders dimensionierten Arrays zu testen...
Ein eindimensionales Array kann ich mit beliebig vielen Werten füllen ohne das der IMA auftritt, nur bei 2 und mehr dimensional Arrays kommt der IMA und das immer nachdem die 2te For-Schleife das 2te mal durchläuft also bei
Code: Alles auswählen
Debug "-----"
listlength = 0
For k = 0 To 2
len = Random(299) + 1
listlength = listlength + len
Debug "len = " + Str(len)
ReDim entries.s(6,6,listlength)
Debug "listlength = " + Str(listlength)
For i = listlength - len To listlength
For j = 0 To 6
For l = 0 To 6
Debug "entries(" + Str(j) + "," + Str(l) + "," + Str(i) + ") = " + Str(i * l * j)
entries(j,l,i) = Str(i * l * j)
Next l
Next j
Next i
Next k
listlength = 0
len = 82
listlength = 82
len = 21
listlength = 103
Der IMA kommt bei entries(0,0,83) also nach der 2ten Erhöhung von listlength wird
For i = listlength - len To listlength noch einmal komplett ausgeführt...[/code]
Verfasst: 07.06.2007 14:19
von Andreas_S
achso, das wusste ich nicht...
Den vorherigen Post habe ich gelöscht weil es einmal funzte und wie ich ihn geschrieben habe und nochmal probierte fuzte er wieder nicht

.
Verfasst: 07.06.2007 21:55
von D@nte
Code: Alles auswählen
Dim entries.s(6,0)
; [PSEUDO] Array & ListIconGadget mit Daten aus .csv-Datei füllen
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = (listlength - len) To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
; [PSEUDO] Array & ListIconGadget leeren, Counter auf 0
Dim entries.s(6,0) ; <- hier mit geht's
listlength = 0
; [PSEUDO] Array & ListIconGadget wieder mit Daten aus .csv-Datei füllen
For k = 0 To 2
len = Random(300)
listlength = listlength + len
ReDim entries.s(6,listlength)
Debug listlength
For i = (listlength - len) To listlength
For j = 0 To 6
entries(j,i) = Str(i * j)
Next j
Next i
Next k
Hab anscheinend die Lösung dank nem Post von Kaeru in nem ganz anderen Zusammenhang...
Allerdings bleibt immernoch die Frage, wieso funktioniert mein ursprünglicher Code nicht?!
Ist das wirklich nen BUG?!