Нет, объединение std :: string определенно не должно зависеть от времени выполнения, но почему-то VAL_TAG_OPEN
и VAL_TAG_CLOSE
кажутся пустыми строками.
Я бы предположил, что у вас где-то есть переполнение буфера или неверная арифметика указателей, так что ваша программа перезаписывает память, содержащую эти "постоянные" значения. Везде, где заканчивается ваша память, она действительно зависит от времени выполнения (и, следовательно, от версии ОС). Я был пойман в ловушку подобных вещей в прошлом, переключая компиляторы или опции оптимизатора.
Как вы упомянули, сохраняя необработанные указатели на экземпляры std :: string в необработанных массивах, такие ошибки на самом деле не всегда невероятны, но их может быть трудно обнаружить, так как использование сборки DEBUG не даст вам никаких итерационных проверок со всеми все это в СЫРЬЕ ... Удачи.