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.


Anmelden zum Antworten