Эта ошибка: «завершить вызов после выброса экземпляра 'std :: logic_error' what (): basic_string :: _ M_construct null not valid"
возникает при попытке создать std :: string путем передачи nullptr / NULL в виде char*
массива / указателя.
Иначе говоря, очень просто, выполнив это:
const char* ptr = nullptr;
std::string str(ptr); // the exception is thrown from the std::string(const char*) constructor
Как говорит messagee, создание std :: string с помощью nullptr / NULL не является действительным. Некоторые реализации стандартной библиотеки могут принять ее, но она не соответствует стандарту; а ваш нет.
Ваш код слишком длинный, чтобы на первый взгляд быстро определить, где именно это происходит, но, по крайней мере, теперь вы знаете, в чем проблема.