> um einen Buffer Overflow zu vermeiden

hu?
das versteh ich nicht...
> Die Anzahl sollte sich schon dynamisch entfalten können.
kann sie ja auch.
das Array ist auch nicht dafür da, irgendetwas zu
zählen,
nur die vergebenen IDs zu notieren.
der klare vorteil dabei ist:
du gehst die "notizenliste" und gleichzeitig die zahlenschleife nur ein einziges mal durch.
bei einer LL lösung musst du ja die zahlenschleife durchgehen,
und jede einzelne zahl mit allen listenelementen vergleichen.
falls du dir sorgen um deinen speicherbereich machst,
das Array oben braucht nur 64K des hauptspeichers,
und du hast damit für die IDs einen Zahlenraum von 65536.
du kannst also mit einem 1MB großen Array einen zahlenraum von 1048576 verwalten.
das genügt für eine 6-stellige ID 0-999999 ...
man kann das ganze noch verschlanken:
du brauchst ja eigentlich nur ein einziges Bit als flag,
also könntest du in dem byte eines Arrayfeldes ganze 8 flags halten.
Code: Alles auswählen
Dim Liste.b(65535)
;...
SQLiteNextCol(DBHandle)
While SQLiteNextRow(DBHandle)
Ergebnis$ = SQLiteValue(Table)
Verknuepfungsbyte = Val(Ergebnis$)
Verknuepfungsbit = Verknuepfungsbyte & 7 ; Modulo 8
Verknuepfungsbyte / 8
Liste(Verknuepfungsbyte) | (1 << Verknuepfungsbit) ; Bit setzen
Wend
TestByte = 0
While Liste(TestByte) = 255 And TestCount < 65536
TestByte +1
Wend
TestBit = 0
While Liste(TestByte) & (1 << TestBit)
TestBit +1
Wend
FoundID = 8* TestByte + TestBit
hier genügen die 64K jetzt für einen zahlenraum von 524288.
deine lösung wäre mir einfach zu
langsam.
außerdem sparst du auch nicht SO viel speicherplatz, weil du 12byte für jedes listenelement benötigst.
d.h., sobald du mehr als 5461 datensätze hast, wird deine liste auch größer als 64K.
...aber ich schau mir deinen logigfehler trotzdem mal an...
[edit] so, hab ich..
so müsste es laufen....
Code: Alles auswählen
TestCount = #LowestPossibleID -1
Repeat
TestCount + 1
ok = 1
ForEach Verknuepfungszahlen()
If TestCount = Verknuepfungszahlen()
ok = 0 : Break
EndIf
Next
Until ok = 1
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.