Speichern von dynamischen Arrays
-
Hi,
ich hab ne Klasse, die in einem Array eine unbestimmte (^= vaiable) Anzahl von floats speichert. Jetzt schreib ich grad ne Memberfktion, die im Prinzip die ganze Klasse in ne Datei speichert. Das sieht ca. so aus:
( aus verständlichkeitsgründen hab ich die initialisierung ma dazugeschrieben )
// Initialisierung bool Map3D::init( Map3D_init _map_descript ) { if( pHeightMap != NULL ) delete[] pHeightMap; map_descript = _map_descript; map.x = (int) ( map_descript.stretch.x / map_descript.unitWidth ) + 1; map.y = (int) ( map_descript.stretch.y / map_descript.unitWidth ) + 1; pHeightMap = new float[ map.x * map.y ]; ZeroMemory( pHeightMap, map.x * map.y * sizeof(float) ); return TRUE; } // Map speichern: bool Map3D::save( char* _file ) { if( pHeightMap == NULL ) return FALSE; FILE* file; if( !( file = fopen( _file, "w" ) ) ) return FALSE; // Daten schreiben: fwrite( &map_descript, sizeof(Map3D_init), 1, file ); fwrite( pHeightMap, sizeof(float), map.x * map.y, file ); // fertig: fclose( file ); return TRUE; } // Map speichern: bool Map3D::load( char* _file ) { FILE* file; if( !( file = fopen( _file, "r" ) ) ) return FALSE; if( pHeightMap != NULL ) delete[] pHeightMap; // Daten lesen: fread( &map_descript, sizeof(Map3D_init), 1, file ); map.x = (int) ( map_descript.stretch.x / map_descript.unitWidth ) + 1; map.y = (int) ( map_descript.stretch.y / map_descript.unitWidth ) + 1; pHeightMap = new float[ map.x * map.y ]; ZeroMemory( pHeightMap, map.x * map.y * sizeof(float) ); fwrite( pHeightMap, sizeof(float), map.x * map.y, file ); // fertig: fclose( file ); return TRUE; }
Man sieht also: Die Größe des Arrays ergibt sich aus dem Inhalt einer Struktur der Klasse. Und ich denke, da liegt irgendwie auch der Fehle; nach speichern und Laden der Map enthält das Array komische, andere Daten und das irgendwie teils komplett zufällig ( +/-∞ oder so ) und teils ganze Passagen richtig (also wie vorher) -> absoluter Bockmist. Die Struktur wurde aber immer richtig geladen. Hab ich irgendnen Trottelfehler gemacht oder was ist der grund??
ich bin verwirrt ...thx im voraus greez, BlAlB
-
Ich weiß nicht, aber ist es absicht, dass du auch in der Lade-Funktion fwrite statt fread benutzt?:
// Daten lesen: fread( &map_descript, sizeof(Map3D_init), 1, file ); map.x = (int) ( map_descript.stretch.x / map_descript.unitWidth ) + 1; map.y = (int) ( map_descript.stretch.y / map_descript.unitWidth ) + 1; pHeightMap = new float[ map.x * map.y ]; ZeroMemory( pHeightMap, map.x * map.y * sizeof(float) ); fwrite( pHeightMap, sizeof(float), map.x * map.y, file ); // <-- WRITE? // fertig: fclose( file );
-
äää - o man, scheisse. naja danke, wirds wohl gewesen sein
ich->setStatus(GL_TROTTEL);
-
hmm ... ne, läuft immer noch nicht und macht die gleichen Fehler ...
Hat jemand ne Ahnung, wie ich prüfen kann, ob die Datei noch richtig geschrieben ( also nur Lesefehler ) oder ob der Fehler schon beim Speichern aufgetreten is? da muss ich wahrscheinlich n script schreiben, oder gehts auch einfacher?
-
Hast du dir die erstellte Datei schonmal angesehen?
Mit einem HEX-Editor zum Beispiel?
Das solltest du mal machen, dann siehst du ja
ob alles korrekt geschrieben wurde.
Wobei mich übrigens wundert, dass du beim Schreiben
den Modus "w" und nicht "w+" benutzt.Was ist eigentlich "map_descript"?
Mal abgesehen vom Namen (sollte es vielleicht »description« heißen? ^^) -
könnte nicht der Fehler bei map.x und map.y liegen?
Ich sehe keine Fehler im Code. Müsste so funktionieren.
Also werf doch mal den Debugger an oder mach ein paar Ausgaben um zu
überprüfen welche Werte die relevanten Variablen haben.