SIGSEV nach new[ca. 8000]
-
Hi,
Ich schreibe gerade spaßeshalber an einem kleinen Programm, dass daten
aus einem .pak file ausliest.
Während ich die Daten aus der Datei auslese,
muss ich Platz schaffen, um sie in den Speicher zu bekommen, was logischerweise
per new erfolgt. Doch bei dem 6. Eintrag verabschiedet sich mein Programm mit
dem allseits beliebten Segmentation fault.Der relevante Code:
class PakFile { string filename; //Header of a packfile struct PakHeader { char signature[SIGNATURE_LEN]; int32_t dir_offset; int32_t dir_size; }; //An directory entry struct PakEntry { char name[FILENAME_LEN]; int32_t position; int32_t length; }; vector<PakEntry> entries; vector<char *> data; void open(const char *filename); public: ...de/constructor }; void PakFile::open(const char *filename) { ...ein paar checks, ob die Datei existiert und nicht korrupt ist //Get the directoryentryheaders PakEntry entry; ifs.seekg(header.dir_offset, ios_base::beg); for(int i = 0; i < n_entries; i++) { ifs.read((char *) &entry, sizeof(PakEntry)); entries.push_back(entry); } //Get the actual data char *data_buf; for(unsigned int i = 0; i < entries.size(); i++) { data_buf = new char[entries[i].length]; ifs.seekg(entries[i].position, ios_base::beg); ifs.read(data_buf, entries[i].position); data.push_back(data_buf); } }
Und bei new char[entries[i].length] verabschiedet er sich mit i = 6 und
entries[i].length = 7924Dank im Voraus
-
Hi nochmal,
Für alle, die sich die Mühe gemacht haben, mein Post zu lesen, danke, habe den Fehler schon.
ifs.read(data_buf, entries[i]->position);
hätte ich
ifs.read(data_buf, entries[i]->length);
schreiben sollen.Naja, danke trotzdem allen