basic_string::_M_replace в C++
Возникает проблема при обработке строки в данном месте:
string s1 = "", nameDir = PATH;
try{
s1 = to_string(uint32_vector_hasher(vec));
nameDir.append(s1.begin(), s1.begin()+3);
} catch (exception const& e) {
cerr << "Exception: " << e.what() << endl;
fun_error(e.what());
}
Дальнейшая обработка:
nameDir += "\\";
try {
nameDir.append(s1.begin()+3, s1.end());
nameDir += (".bin");
} catch (exception const& e) {
cerr << "Exception: " << e.what() << endl;
fun_error(e.what());
}
функция uint32_vector_hasher:
size_t uint32_vector_hasher(vector<pair<uint32_t,uint32_t>> const& v) {
set<pair<uint32_t,uint32_t>> stt;
for(auto it: v) {
stt.insert(it);
}
vector<uint32_t> vec = {};
for(auto it: stt) {
vec.push_back(it.first);
vec.push_back(it.second);
}
size_t seed = vec.size();
for(auto x : vec) {
x = ((x >> 16) ^ x) * 0x45d9f3b;
x = ((x >> 16) ^ x) * 0x45d9f3b;
x = (x >> 16) ^ x;
seed ^= x + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
return seed;
}
Программа работает с не очень большим размером вектора - примерно 1000 элементов-пар (pair<uint32_t,uint32_t>). На моем компьютере программа отрабатывает успешно (при повторе и запуске других решений), а на компьютере коллеги в какой-то момент выдается ошибка basic_string::_M_replace.
Вопрос: с чем может быть связанна такая ошибка?
P.S. Я предполагаю, что это ошибка возникает при исчерпании строки - что навряд ли, так как string::max_size = 4,611,686,018,427,387,897. Если бы это был выход за размер строки (то есть строка меньше s1.begin()+3), то была бы другая ошибка. И, к слову, хэш работает так, что получив он хотя бы 1 элемент-пару, то строка была бы больше 3. (В хэш функции все в порядке, ее трогать не надо:) )