Speicherabstürze beim Datensatz-Handling im Speicher

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Gerhard
Beiträge: 37
Registriert: 29.09.2004 23:44
Wohnort: Zedtwitz

Speicherabstürze beim Datensatz-Handling im Speicher

Beitrag von Gerhard »

Hallo liebe PB-Freunde
ich halte und nutze in meinem Logbuchprogramm
Datensätze (über 16000) im Speicher. Dabei stellte
ich fest, dass auf meinem Rechner mit WinME alles
korrekt abläuft (zumindest meistens), aber auf einem
anderen Rechner mit Win2000 NICHT! Wie kann das
sein? Wo habe ich noch einen Fehler?
In verkürzter Form habe ich das Listing malnachstehend
aufgeführt.
16300 Datensätze je 121 Byte Länge (feste Feldlänge)
werden in den Speicher eingelesen.
Danach wird ein weiterer Datensatz mit 121 Byte zu-
sätzlich in den Speicher geschrieben, gewissermassen
angehängt.
Zum Schluss sollen alle Datensätze als gepackte Datei
auf der Platte gesichert werden (Backup)
Das läuft in meinem Programm natürlich nicht immer
so der Reihenfolge nach ab, hier nur verkürzt.

Bitte um Hilfe, dass den Fehler jemand findet, DANKE

Hier das Listing:

Code: Alles auswählen

;  Hauptprogramm
;1.Datensätze aus dem Datenfile in den Speicher lesen
;   Zur Zeit sinds etwa 16300 Datensätze je 121 Byte fester
;   Feldlänge
;==============================================
Global Bytes.l, qso.s

If ReadFile(0,"logbuch.txt")<>0
    Bytes.l=Lof()
    *MemoryBuffer=AllocateMemory(1,Bytes,0)
    ReadData(*MemoryBuffer,Bytes)
    CloseFile(0)
EndIf
;==============================================

;2.Einen weiteren Datensatz mit fester Feldlänge von
;  121 Bytes in den Speicher lesen (alle Datensätze haben
;  feste Feldlänge von 121 Bytes
qso.s="xxxxxxxxxx+n";insgesamt 121 Bytes hier abgekürzt!
Bytes=Bytes+121

*StrAdr=ReAllocateMemory(1,Bytes) ;Alte Speicherdaten behalten
*HilfsBuffer=*StrAdr+(Bytes-121)
PokeS(*HilfsBuffer,qso,121)  ;Ein QSO mit 121 Byte dazuspeichern

;==============================================

;3.Eine Datensicherung der gesamten Datensätze (16300+1)
;  als gepackte Datei vom Speicher machen und auf der Platte .
;  speichern. Der Dateiname beinhaltet das Datum.

CreatePack("logbuch_"+tag+"."+monat+"."+jahr+".pak")
*SpeichQSO=ReAllocateMemory(1,Bytes)
AddPackMemory(*SpeichQSO,Bytes)
ClosePack()

End
WICHTIG: Der Absturz bei Win2000 kommt fast immer nur
bei Punkt 3.: Alle Datensätze aus dem Speicher als gepackte
BackUp Datei auf der Platte sichern!!



Gruss
Gerhard
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

Überprüfe doch mal den Rückgabewert von CreatePack(). Vielleicht kann
die Datei nicht (oder nicht immer) angelegt werden.
Basic Pur = PureBasic
Benutzeravatar
Gerhard
Beiträge: 37
Registriert: 29.09.2004 23:44
Wohnort: Zedtwitz

Beitrag von Gerhard »

Hallo Sylvia,
danke für die Antwort. Das könnte so ein. Allerdings
habe ich durch Tests herausgefunden, dass es auch an
den Speicheroperationen liegt. Hmm...
Ich gehe Deinem Hinweis nach.

Servus
Gerhard
Antworten