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 :oops:

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 :oops:
Fehler meinerseits, habs gelöscht :wink:

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 :lol:

Code: Alles auswählen

For i = listlength - len+1 To listlength
kann ja nur dazwischen sein :lol:

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 :cry: .


//Edit:

:lol: wenn man nur zB 60 verwendet dann funzt es einmal nicht und einmal schon :lol:

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 :lol: .

Verfasst: 07.06.2007 14:16
von D@nte
Wann löschte den Post jetzt wieder?! :twisted:

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 :cry: .

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?!