Вопрос не имеет особого смысла, и это означает, что вам, вероятно, следует начать с хорошей книги или учебника, чтобы понять основы (объявление переменной в заголовочном файле, вероятно, не очень хорошая идея, объявление функции неверно в заголовок), вся терминология, которую вы используете: странно ...
В любом случае, что касается вашей конкретной проблемы, лучший совет - запустить приложение в отладчике, и вы увидите, что происходит. Мое первое предположение (глядя на хрустальный шар) состоит в том, что вы создаете объект Config
с автоматической продолжительностью хранения в области (Config config = get_config();
- этот создает новый объект в текущей области, который копия объекта conf
) и затем получение указателя на него (Config *g_config = &config;
- указатель на объект config
в текущей области, а не на глобальный conf
), который вы затем передаете и позже используете вне область действия, когда объект уже был уничтожен.
Другой вариант заключается в том, что вы столкнулись с фиаско порядка инициализации , если эти две строки не находятся внутри контекста, в этом случае вы можете попытаться скопировать еще неинициализированный объект conf
в config
.
Само std::bad_alloc
- это исключение, которое выдается, когда new
не удается выделить память, и это может произойти, если в системе не хватает ресурсов (возможно, здесь нет проблемы) или если запрос неверен.