Datei beschreiben
-
hiho,
habe heute (teils erfolgreich) versucht einträge in einer .xml datei zu erweitern mit hilfe von fstream.
Das ganze klappt mittlerweile so wie ich es will das einzige problem ist ,dass sich das programm dannach aufhängt bzw lange im "leerlauf" bleibt.Also die .xml datei sieht nach dem ausführen genau so aus wie ich es will also müsste ja eigentlich alles geklappt haben.
#include <iostream> #include <fstream> #include <cstdio> #include <stdio.h> //#include <windows.h> using namespace std; ifstream::pos_type size; char * memblock; int main (int argc, char **argv) { int index = 0; char FILE[256]; cout<<"\nFilepath: "; cin.getline(FILE,256); char newentry[256] = "<item id=\"12742842027041\" char=\"Dex\" time=\"Wed 05/19/10 17:50:02\" quality=\"6\" ethereal=\"0\" mode=\"1\" name=\"juhu\" ilvl=\"99\" location=\"The Worldstone Chamber\" type=\"388\" typedesc=\"Battle Boots\">c++</item>\r\n"; cout<<"\n\n"; ifstream file (FILE, ios::in|ios::binary|ios::ate); if (file.is_open()) { size = int(file.tellg()) + strlen(newentry); //// memblock erweitern memblock = new char [size]; file.seekg (0, ios::beg); file.read (memblock, size); file.close(); cout<<size<<endl; ofstream filew (FILE, ios::in|ios::binary|ios::ate|ios::trunc); for (int j = int(size); j>113; j--) { memblock[j+strlen(newentry)] = memblock[j]; } for (int i = 114; i<(114+int(strlen(newentry)));i++) { memblock[i] = newentry[index]; index++; } filew.write(memblock, size); filew.close(); delete[] memblock; } else { cout << "\nUnable to open file"; } return 0; }
-
Schau dir mal diese Zeile an:
memblock = new char [size];Hier reservierst du Speicher der Größe size, die du später auch mal mit cout ausgibst.
Und nun schau dir mal memblock in deinen zwei Schleifen an:[...] memblock[j+strlen(newentry)] = memblock[j]; [...} memblock[i] = newentry[index]; [...]Hier insbesondere den Index. Lass ihn dir pro Schleifendurchlauf mal ausgeben.
Du scheinst hier auf Speicher zuzugreifen, der nicht durch dein Programm gefordert wurde
-
hm ja klingt einleuchtend ,dass es sich um einen Fehler bei der Speicherreservierung handelt war auch mein Verdacht. Jedoch ist mein Wissen da zu dünn angesiedelt um den Fehler zu finden

aber ich hab doch eigentlich genug speicher reserviert oder? habe ja die variable size extra erhöht:
size = int(file.tellg()) + strlen(newentry);
oder wie fordere ich denn genau soviel speicher an ,dass der neue eintrag auch reinpasst?
-
also ich hab net gesagt, dass du zu wenig Speicher bereitgestellt hast.Beispiel:
size = int(file.tellg()) + strlen(newentry); // nehmen wir hier an, size = 200 + 210 // j beginnt also bei 410 (da 200 + 210) for (int j = int(size); j>113; j--) { // du greifst auf 410 + 210 (denn newentry ist oben schon 210 memblock[j+strlen(newentry)] = memblock[j]; }Ein Königreich für einen Schreibtischtest

-
tausend dank auf den fehler wär ich wahrscheinlich nicht gekommen obwohl er eigentlich sehr offensichtlich ist

for (int j = int(size); j>113; j--) { memblock[j] = memblock[j-strlen(newentry)]; }so muss es sein jetzt klappts danke vielmals
