Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Deallozierung einer per Array initialisierten Speicherbank ?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Build0815



Anmeldungsdatum: 30.09.2006
Beiträge: 51

BeitragVerfasst am: 27.01.2007, 20:02    Titel: Deallozierung einer per Array initialisierten Speicherbank ? Antworten mit Zitat

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". traurig

Hat vielleicht jemand eine Ahnung woran das liegen könnte ? zwinkern

(Ich hab versucht den Speicher so freizugeben: )

Code:

For n = 1 to 16
    Deallocate Buffer(n)
Next
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.01.2007, 21:01    Titel: Re: Deallozierung einer per Array initialisierten Speicherba Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Build0815



Anmeldungsdatum: 30.09.2006
Beiträge: 51

BeitragVerfasst am: 27.01.2007, 21:17    Titel: Antworten mit Zitat

@ytwinky - Danke, aber dein Vorschlag hat leider nicht geklappt. traurig

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. durchgeknallt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.01.2007, 22:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.01.2007, 22:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Build0815



Anmeldungsdatum: 30.09.2006
Beiträge: 51

BeitragVerfasst am: 28.01.2007, 00:41    Titel: Antworten mit Zitat

Danke, danke lächeln ... 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. neutral
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz