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]