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. (В хэш функции все в порядке, ее трогать не надо:) )


Ответы (0 шт):