deepthroat
Erfahrenes Mitglied
Hi.
Gruß
Ja. Aber deswegen wird ja auch die Adresse des Zeigers an die Funktion s_fill übergeben, damit der Zeiger in dieser Funktion initialisiert werden kann.Leider ist so einiges schief an Deinem Projekt und das beginnt schon in main(...)
Hier wird ein Zeiger auf eine Variable r vereinbart, aber kein Speicher alloziiert.Code:int main(int argc, char* argv[]) { row *r; s_fill(&r);
Quasi eine fiktive Adresse mit Daten. Dieser Pointer ist ungultig.
Du weißt offensichtlich nicht wie das Format der Datei aufgebaut ist. Die Datei beginnt mit einem int, der angibt wieviel Elemente in der Datei gespeichert sind. Das hatte spammich in einem anderen Thema geschrieben.Selbst wenn Du jetzt Speicher alloziiert hättest geht es dann im Code weiter...
Du liest von den Daten schon mal einen int Wert aus der Datei ein (hast also eine Seite im Buch aufgeschlagen), gibst die Nummer aus und willst dann von der aktuellen Position ausgehend den kompletten Datensatz einlesen - was auch funktioniert wenn noch weitere Daten verfügbar sind, aber es wird der aktuelle Datensatz und ein Teil vom nächsten Datensatz gelesen! So passt das nicht in Deine Struktur.Code://f.seekg(sizeof(int)); f.read(reinterpret_cast<char*> (&n), sizeof(n)); cout << n << endl; // nach diesem read steht der Dateizeiger falsch! // muss! zurückgesetzt werden f.seekg( - ( sizeof( n ) ), ios::cur ); //
![]()
Gruß