Я думаю, что проблема в том, что вы храните значения где-то в vector
, которые не должны храниться постоянно. В частности, эта строка:
UN.push_back(UserName.c_str());
Кажется, что сохраняет результат UserName.c_str()
в vector<const char*>
. Если вы сделаете это, то у вас возникнут проблемы, как только вы измените строку UserName
или когда эта строка выйдет из области видимости. Значение c_str()
довольно хрупкое - оно недопустимо после выполнения каких-либо действий с исходной строкой - и существует главным образом для того, чтобы вы могли взять строковые данные и передать их в код C, которому в качестве аргумента требуется const char*
.
Чтобы исправить это, я бы предложил либо явно скопировать строки перед тем, как вставить их в вектор:
UN.push_back(strdup(UserName.c_str());
(Вы не должны использовать strdup
здесь; это просто пример)
В качестве альтернативы рассмотрите возможность хранения std::string
s в vector
, который владеет строковым ресурсом, на который они указывают, и не имеет этой проблемы.
Надеюсь, это поможет!