Hallo, ich habe einen Fehler den ich mir nicht ganz erklären kann und hoffe auf die Hilfe eines Profis.
Folgendes, ich erweitere gerade das kleine SDL-Spiel aus dem Buch, abschließend ist jetzt eine Highscoretabelle dran dessen Werte natürlich auch gespeichert werden sollen. Die Werte befinden sich dabei in einer Struktur und es handelt sich jeweils um ein int-Array und um ein char-Array.
Hinsichtlich des int-Arrays funktioniert alles einwandfrei, beim char-Array tritt ein Fehler auf welchen ich mir nicht so ganz erklären kann.
Führe ich das Programm so wie es unten steht aus, läuft alles einwandfrei. Habe ich bereits alles einmal gespeichert und verzichte durch auskommentieren darauf die Speicherfunktion aufzurufen, funktioniert auch alles ganz so wie gewünscht.
So und nun kommt das was ich ganz und gar nicht verstehe. Kommentiere ich die Zeilen in der Speicherfunktion aus in welcher in das char-Array geschrieben wird und rufe ich die Speicherfunktion so wie eben nicht auf, bekomme ich per cout die Meldung das die Datei nicht geöffnet werden konnte. Die Werte aus dem int-Array werden aber auch dann korrekt ausgegeben wenn ich sie auskommentiere.
Ich verstehe zum einen nicht warum die Werte aus einer Funktion die ich gar nicht aufrufe überhaupt einen Einfluss haben und zum anderen warum hiervon nur die char aber nicht die int-Variablen betroffen sind.
Ich habe mir die Mühe gemacht das ganze in ein lauffähiges kleines Programm zu packen, der Fehler tritt auch hier auf.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#include <iostream>
#include <fstream>
using namespace std;
class CLoadSave
{
public:
void Save(int Wert, int Pos);
void Load(int *pWert, char* *pText);
struct m_sWerte
{
int Points[10];
char* Names[10][20];
};
};
int main()
{
CLoadSave *m_pLoadSave;
m_pLoadSave = new CLoadSave;
int Wert;
char* Text;
//Speichervorgang aufrufen
m_pLoadSave->Save(1, 1);
//Inhalt der Highscoretabelle ausgeben
for(int i=0; i<=9; i++)
{
Wert = i;
m_pLoadSave->Load(&Wert, &Text);
cout << "Wert: "<<Wert<<endl;
cout << "Text: "<<Text<<endl;
}
return 0;
}
void CLoadSave::Save(int Wert, int Pos)
{
m_sWerte Werte;
Werte.Points[0] = 6500;
Werte.Points[1] = 18000;
Werte.Points[2] = 19200;
Werte.Points[3] = 31400;
Werte.Points[4] = 38000;
Werte.Points[5] = 50200;
Werte.Points[6] = 61200;
Werte.Points[7] = 88700;
Werte.Points[8] = 96100;
Werte.Points[9] = 142100;
Werte.Points[10] = 10000000;
Werte.Names[0][19] = "Name0";
Werte.Names[1][19] = "Name1";
Werte.Names[2][19] = "Name2";
Werte.Names[3][19] = "Name3";
Werte.Names[4][19] = "Name4";
Werte.Names[5][19] = "Name5";
Werte.Names[6][19] = "Name6";
Werte.Names[7][19] = "Name7";
Werte.Names[8][19] = "Name8";
Werte.Names[9][19] = "Name9";
//Datei zum Schreiben öffnen und Highscore hineinschreiben
ofstream Output("Highscore.hsc", ios::binary);
Output.write ((char*) &Werte, sizeof (Werte));
//Datei schließen
Output.close();
}//Ende SaveHighscore
//LoadHighscore
//Aufgabe: Die Daten der Highscoretabelle in einer Datei speichern
void CLoadSave::Load(int *pWert, char* *pText)
{
m_sWerte Werte;
int Textzaehler = *pWert;
//Datei zum Schreiben öffnen und Highscore hineinschreiben
ifstream Input("Highscore.hsc",ios::binary);
//Überprüfung ob die Datei korrekt geladen werden konnte
if (Input == NULL)
{
cout << "Datei konnte nicht geoeffnet werden." << endl;
}else{
Input.read ((char*) &Werte, sizeof (Werte));
}
*pWert = Werte.Points[*pWert];
*pText = Werte.Names[Textzaehler][19];
//Datei schließen
Input.close();
}//Ende Load
|
Diese Zeile auskommentieren:
|
C-/C++-Quelltext
|
1
|
//m_pLoadSave->Save(1, 1);
|
Und das auch noch:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
/*
Werte.Names[0][19] = "Name0";
Werte.Names[1][19] = "Name1";
Werte.Names[2][19] = "Name2";
Werte.Names[3][19] = "Name3";
Werte.Names[4][19] = "Name4";
Werte.Names[5][19] = "Name5";
Werte.Names[6][19] = "Name6";
Werte.Names[7][19] = "Name7";
Werte.Names[8][19] = "Name8";
Werte.Names[9][19] = "Name9";
*/
|