Variablen in Klassen enthalten falsche Werte



  • Ich habe eine Klasse, die Werte über eine Datei enthält:

    class projectinfostruct {
      public:
        char *version;
        char *fcVersion;
        char *language;
        char *name;
        char *author;
        char *email;
        char *homepage;
        char *feedURL;
    };
    typedef projectinfostruct fc_project_info;
    
    // und folgende funktion
    const char *get_value (const char *name, string block);
    

    Wenn ich nun aus der Datei den enstprechenden Wert abrufe:

    ret.version = (char *) get_value ("ProjectVer", content);
    

    steht in der klasse ein anderer Wert als vorgesehen. get_value überträgt aber den [b]richtigen[b] Wert. Die Klasse enthält dann manchmal korrekte Werte, dann manchmal zweimal den selben Wert in zwei verschiedenen Variablen und so weiter...

    Ich hofffe ich konnte einigermaßen klarmachen was das Problem ist 🙂

    Weiß jemand woran das liegt? Bin relativ verzweifelt 😕

    Danke schonmal.

    MfG,
    Sean



  • Bist du sicher, dass der Speicher noch verfügbar ist beim auslesen. Nimm doch bitte einen std::string dafür anstatt die char*. Und der Cast sieht blöd aus. Dafür gibt es const_cast!



  • Den man in diesem Fall aber unter keinen Umständen benutzen sollte. 🙂



  • Jo 😉 🙄 .



  • Der Speicher sollte verfügbar sein, ja.
    Ich hab direkt nach dem zuweisen der Werte einen breakpoint gesetzt und dann nen Watch auf *ret. Da hab ich schon die falschen Werte zurückbekommen.

    Ich hab in dem Fall auf std:string verzichtet, weil ich dachte das das mehr Speicher braucht, aber das kann man ja noch ändern. 🙂



  • std::string ist nur minimal größer. Aber viel schneller.



  • struct foo {
    	std::string bar;
    	std::string foobar;
    	std::string fubar;
    };
    
    const char *blub ();
    const char *blob ();
    const char *flub ();
    
    int main () {
    	foo f = { blub(), blob(), flub() };
    }
    

    std::string muss nur zusätzlich die größe extra speichern. minimal.
    denk dir nen anderen engpass aus.
    nimm außerdem statt diesen structs einen besser objekt orientierten ansatz, wenn du schon c++ mach[st/en willst]


Anmelden zum Antworten