Class C {
struct Something {
string s;
// Junk.
}
// map from some string to something.
map<string, Something> map;
// Some more code:
const Something *Lookup(string k) const {
const something *l = SomeLookUpFunction();
cout << l;
cout << &l->s;
cout << l->s;
return l;
}
}
// Some Test file
const C::Something *cs = C::Lookup("some_key");
cout << cs;
cout << &cs->s;
cout << cs->s;
Странная вещь заключается в следующем:
* Для функции поиска:
0x9999999
0x1277777
some_string
* Для тестового кода
0x9999999
0x1277777
000000000000000000000000000000000000000000 ….
В тестовом файле он дает очень длинную строку нулей, но адреса совпадают. Есть идеи, что может пойти не так?
Поскольку вы не поделились кодом для функции SomeLookUpFunction
Я должен догадаться, что ты возврат указателя на локальный объект типа Something
, Это плохая идея, видите аналогичный QA.
Чтобы начать исправлять свой код, вы должны начать с возврата простого объекта вместо указателя, как показано ниже:
// Some more code:
const Something lookup(string k) const {
const something l = SomeLookUpFunction(); // return simple object
cout << &l;
cout << &l.s;
cout << l.s;
return l; // same object
}
Конечно, вы должны улучшить код, предоставив конструкторы копирования для типа something
и даже улучшая свой map
,
Других решений пока нет …