Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Build0815

Anmeldungsdatum: 30.09.2006 Beiträge: 51
|
Verfasst am: 27.01.2007, 20:02 Titel: Deallozierung einer per Array initialisierten Speicherbank ? |
|
|
Hallo,
Ich hab folgendes Problem... Ich hab 16 verschiedene Speicherbereiche von 16 Byte Länge mit dem "Allocate" Befehl reserviert und die Pointer in 16 verschiedenen Arrays abgespeichert, wie folgt:
Code: |
Dim As UByte Ptr Buffer(1 To 16)
Dim n As UByte
For n = 1 To 16
Buffer(n) = Allocate(16 * Len(UByte))
Next
|
... Läuft ja alles prima, nur wenn ich versuche den Speicher am Ende des Programms mit "Deallocate" wieder freizugeben, dann hängt sich das ganze Programm auf, und wenn ich den Speicher nicht freigebe, kommt nach dem "End" Behfehl eine schöne Fehlermeldung von wegen, "Anweisung an Speicherstelle so-und-so versucht auf Speicherstelle dies-und-das zuzugreiffen, das Programm konnte "Read" nicht auf dem Speicher ausführen".
Hat vielleicht jemand eine Ahnung woran das liegen könnte ?
(Ich hab versucht den Speicher so freizugeben: )
Code: |
For n = 1 to 16
Deallocate Buffer(n)
Next
|
|
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.01.2007, 21:01 Titel: Re: Deallozierung einer per Array initialisierten Speicherba |
|
|
Build0815 hat Folgendes geschrieben: | (Ich hab versucht den Speicher so freizugeben: )
Code: |
For n = 1 to 16
Deallocate Buffer(n)
Next
|
| Probier doch mal Folgendes: Code: | For n = 16 to 1 Step -1
Deallocate Buffer(n)
Next | ..wenns klappt, habe ich recht mit meiner Vermutung, das zuletzt reservierter Speicher
auch zuerst wieder freigegeben werden muß..
..wenn nicht, kann ich dir leider nicht helfen.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Build0815

Anmeldungsdatum: 30.09.2006 Beiträge: 51
|
Verfasst am: 27.01.2007, 21:17 Titel: |
|
|
@ytwinky - Danke, aber dein Vorschlag hat leider nicht geklappt.
Allerdings bin ich draufgekommen, dass wenn ich nur genau die Hälfte der Arrays (Also hier 8 statt 16) die auf den Speicher "zeigen", freigebe scheint es zu klappen.
Code: |
For n = 1 To 8
Deallocate BufferX(n)
Next
|
(Ob dadurch aber auch die restlichen 8 freigegeben werden ist allerdings fraglich) ... sehr komisch das ganze.  |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.01.2007, 22:13 Titel: |
|
|
Ich habe das Programm mal geändert und ausgeführt.. Code: | Option Explicit
Dim As UByte Ptr Buffer(1 To 16)
Dim n As UByte
For n = 1 To 16
Buffer(n) = Allocate(16 * Len(UByte))
Next
For n = 1 to 16
DeAllocate Buffer(n)
Next
For n = 1 To 16
Buffer(n) = Allocate(16 * Len(UByte))
Next
For n = 16 to 1 Step -1
DeAllocate Buffer(n)
Next
?"Eniki.."
Sleep
End | ..am Ende erscheint bei mir ganz brav 'Eniki..'
(als Aufforderung mit einer beliebigen Taste weiterzumachen) _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.01.2007, 22:17 Titel: |
|
|
Wenn dein Programm abstürzt, heißt dass immer, dass du irgenwo zu viel oder zu wenig speicher belegt hast (einige user erinnern sich vielleicht noch an meinen schier endlosen kampf mit den grafiken in Fruit Battle...). Vielleicht solltest du mal in dieser Richtung nachforschen... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Build0815

Anmeldungsdatum: 30.09.2006 Beiträge: 51
|
Verfasst am: 28.01.2007, 00:41 Titel: |
|
|
Danke, danke ... Soweit ich das jetzt analysiert habe, scheinen mir da tatsächlich einige Fehler mit Zugriffen auf Speicherstellen unterlaufen zu sein, die das deallozieren einwenig ...ähm, erschweren.  |
|
Nach oben |
|
 |
|