В вашей функции add_item()
, thing
является локальной переменной . Вы вставляете его адрес в вектор, но когда функция возвращает, то thing
больше не существует, поэтому указатель, сохраненный в вашем векторе, недействителен, и попытка разыменования его позже вызовет неопределенное поведение.
Как упоминается в комментариях, что вам, скорее всего, нужен вектор string
объектов , а не string
указателей .
Однако, если вы действительно нужно использовать vector<string*>
(хотя я не вижу необходимости, и я бы не рекомендовал это делать), тогда вам следует создать новую строку в вашей функции add_item()
(и, конечно, , затем delete
это при последующем удалении его из вектора):
void add_item(vector<string*> &items) {
string *thing = new string;
cout << "Add this item: ";
cin >> *thing;
items.push_back(thing);
return;
}
vector<string*> items;
add_item(items);
...
for (size_t i = 0; i < items.size(); ++i) {
delete items[i];
}
В этом случае thing
создается в куче и останется действителен после возврата функции.