Hey Leute,
ich versuche gerade noch rechtzeitig zur WM ein kleines TIPP Spiel auf die Beine zu bekommen. (Und natürlich um meine C++ Kenntnisse zu vertiefen
)
Um die Bedienung möglichst einfach zu halten möchte ich vorher schon ein paar Eingangsdaten (Welche Länder spielen) als Vektor speicher (kleines Extra Programm), dass später einfach eingelesen werden soll.
Könnte das Problem an dieser Stelle umgehen, da jeder selbst die entsprechenden Daten eingeben kann, es geht aber hauptsächlich um das einlesen von Daten.
Zunächst ein paar Hintergrund Infos:
Die Struktur, die im Vektor gespeichert wird:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
//Struktur Daten erzeugen
struct sTeam
{
bool blActive;
String strName;
Text txtName;
String strGroup;
// + ein paar zusätzliche Daten
};
std::vector<sTeam> vecTeams; // Vektor, der am Ende gespeichert werden soll
|
Initialisierung d. Vektors (Anfangsdaten festgelegen)
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
for(int i=0; i < (16+(blMode)*16); i++)
{
sTeam team;
vecTeams.push_back(team);
vecTeams[i].blActive = true;
vecTeams[i].strName = "";
// + ein paar weitere Anfangsdaten
} // ende if
|
Das ganze soll nun gespeichert werden (in einem Unterverzeichnis "tm")
|
C-/C++-Quelltext
|
1
2
3
|
std::ofstream save("tm/test.dat", std::ios::binary);
save.write((char*) &vecTeams, sizeof(vecTeams));
save.close();
|
Es wird auch eine Datei erzeugt!
Da das Einlesen in den anderen Programm nicht funktioniert hat, habe ich versucht im selben Programm meinen Code zu prüfen.
Dazu habe ich einen neuen Vektor angelegt und ihn mit anderen Daten initialisiert.
Danach versuche ich die Datei zu öffnen und prüfe ein paar Daten - Es werden die richtigen Daten aus der gespeicherten Datei ausgegeben.
|
C-/C++-Quelltext
|
1
2
3
4
5
|
if (load.is_open() == false)
{ std::cout << "nicht geladen" << std::endl; }
load.read((char*) &vec, sizeof(vec));
load.close();
|
Wenn das Programm aber durch ist kommt folgende Meldung:
Unbehandelte Ausnahme ...: Zugriffsverletzung beim Schreiben an Position 0xfeeefeee
Nach meiner suche, habe ich eine Ahnung, dass es irgendetwas damit zu tun hat, dass man in der Datei die Adresse übergibt, wo der Vektor gespeichert ist. Diese kann sich wohl ändern und dann natürlich nicht mehr darauf zugegriffen werden.
Dass ich dann dennoch die richtigen Daten erhalte, liegt dann wohl daran, dass der PC noch nicht die Gelegenheit hatte den entsprechenden Speicherbereich zu überschreiben.
Was kann ich nun tun, damit dieser Fehler nicht auftritt, bzw. dass ich die Daten ordentlich speichern kann und später wieder abrufe.
Wie gesagt ich möchte später den Spielstand (Klasse) abspeichern, und da wäre der Effekt ja blöd.
Vielen Dank schon mal fürs durchlesen.
VG