Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 20.10.2003, 13:43 Titel: string lässt sich nicht speichern |
|
|
Hallo,
ich habe folgende Struktur:
Code: | struct Spieler
{
BOOL bHuman; // ist der Spieler ein Mensch?
// char Name[50];
string Name; // Name des Spielers
int Punkte; // Punktzahl
};
|
und möchte 10 Elemente "Spieler" aus der Datei "Liste.bin" auslesen, die Methode "Insert" fügt das jeweilige Element dann in eine list<Spieler> ein.
Code: | void CHighscore::Load()
{
FILE *Datei = fopen("Liste.bin","r");
Spieler dummy;
if (NULL != Datei)
{
for (int i = 0; i<m_NumberEntries; i++)
{
fread(&dummy, sizeof(dummy), 1, Datei);
Insert(dummy);
}
}
fclose(Datei);
} |
Es kommt manchmal die Fehlermeldung
"Die Anweisung in "0x..." verweist auf Speicher in "0x...". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden."
Diese Meldung erscheint zweimal, mit jeweils unterschiedlichen Speicherbereichen.
Zu dem "manchmal": Das passiert immer dann, wenn ich die Liste gelöscht habe und das Programm anschließend neu starte. Hier noch die entsprechenden Code-Bereiche:
löschen:
Code: |
Spieler dummy;
dummy.bHuman = FALSE;
//strcpy(dummy.Name,"abc");
dummy.Name = "abc";
dummy.Punkte = 0;
for (int i=0; i<m_NumberEntries; i++)
{
SpielerListe.push_front(dummy);
}
Save();
Load();
|
speichern:
Code: |
FILE *Datei = fopen("Liste.bin","w");
Spieler dummy;
list<Spieler>::iterator it = SpielerListe.begin();;
for (int i = 0; i<m_NumberEntries; i++)
{
dummy = *it;
fwrite(&dummy, sizeof(dummy), 1, Datei);
it++;
}
fclose(Datei);
|
bin wieder mal für jeden kleinen Hinweis dankbar!
übrigens: mit "char Name[50]" statt "string Name" geht alles gut...
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 20.10.2003, 13:58 Titel: |
|
|
Zitat: |
übrigens: mit "char Name[50]" statt "string Name" geht alles gut...
|
Das ist auch kein Wunder. Woher soll das Programm wissen wo dein String steht oder wie groß er ist? Bei char Name[50]; ist es klar. Es sind 50 Byte ab der Speicherstelle Name. Ein std::string wird dynamisch erstellt. Hier ist sowohl die Größe als auch die Speicheradresse in dem Objekt drin. Das kann nicht gehen.
Christian |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 20.10.2003, 14:08 Titel: |
|
|
klingt logisch
dann werde ich das alles doch bei char lassen...
thx
Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 21.10.2003, 13:56 Titel: |
|
|
Du brauchst es nicht bei char* lassen:
Code: |
ein_ofstream << ein_string;
// fertig
|
_________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 21.10.2003, 16:43 Titel: |
|
|
ist der Operator "<<" nicht nur für Konsolenanwendungen?
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
abc_d JLI Master Trainee
Alter: 34 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 21.10.2003, 17:06 Titel: |
|
|
cout überladet den Operator für sich, wieso sollen das andere nicht auch machen? Übrigens kann man damit auch bitweise verschieben. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 21.10.2003, 20:17 Titel: |
|
|
könnte mir dann nochmal jemand erklären, was ein ofstream ist? und wie löst dieser mein Problem?
thx
Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
|
Nach oben |
|
|
|