Frage zu Pointern
-
Hallo :),
ich habe folgendes Problem:
Ich habe eine Funktion an die ein Zeiger auf einen Zeiger übergeben wird, um Speicher zu reservieren.
bool ReadFile(FileHeader** HeaderStruct,FileInfo** InfoStruct,char* Filename)Das Erstellen klappt im ersten Teil gut mit:
*HeaderStruct = new FileHeader;Hier hoffe ich stimmt der Sytax auch, zumindest gibt cout das richtige aus^^:
ReadFile(File,&(*HeaderStruct)->i_Version,sizeof(int),&Buffer,NULL);Jetzt will ich allerdings einen Array erstellen und hier fangen die Probleme an:
*InfoStruct = new FileInfo[Regions];Folgender Code verursacht einen Speicherfehler und das Programm wird beendet (Regions hat einen Wert von 37, daran kanns nicht liegen):
do { ReadFile(File,&b_Buffer,sizeof(BYTE),&Buffer,NULL); (*InfoStruct[6]).str_RegionName.push_back(char(b_Buffer)); }while(b_Buffer != 0x00);Ich denke mal irgendwas hab ich noch nicht ganz verstanden und habe einen falschen Syntax verwendet :(.
Ich hoffe ihr könnte mir helfen das Problem zu lösen.
Lg
Wood
-
Wood schrieb:
do { ReadFile(File,&b_Buffer,sizeof(BYTE),&Buffer,NULL); (*InfoStruct[6]).str_RegionName.push_back(char(b_Buffer)); }while(b_Buffer != 0x00);Bei *InfoStruct[6] müsstest du zuerst dereferenzieren und dann den Indexoperator verwenden. Die Operatorenrangfolge ist allerdings andersrum.
-
Ich habs jetzt hinbekommen, jedoch bereitet mir das Löschen nun Probleme...
Ich denke ich werde lieber Vektoren benutzen, da der Code nun seltsame Formen annimmt...
Vielen Dank für deine Hilfe

-
Wood schrieb:
Ich denke ich werde lieber Vektoren benutzen, da der Code nun seltsame Formen annimmt...
Weise Entscheidung.

Doppelzeiger und Speicher-Beschaffungs-Funktionen sind in C noch relativ üblich, in C++ aber zumindest auf höherer Abstraktionsebene kaum noch vertreten. Der Wechsel zu Klassen und typsicheren Konstrukten erhöht nicht nur die Übersichtlichkeit und Wartbarkeit, sondern dämmt auch allfällige Fehler besser ein.