Форум программистов, компьютерный форум CyberForum.ru

Инициализация static map - C++

Восстановить пароль Регистрация
 
unkarjedy
3 / 3 / 0
Регистрация: 13.03.2011
Сообщений: 114
08.04.2014, 15:47     Инициализация static map #1
Есть модуль, отвечающий за выдачу Сообщения ошибки по коду ошибки.
Пока использую просто в тупую статический map прям в коде. Потом сделаю уже базу...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "ErrorCodes.h"
#include <map>
using namespace std;
 
static map<ERROR_CODE, string> em;
static bool isEmItialized = false;
static void InitErrorMessages();
 
string GetErrorMessage(ERROR_CODE rc) {
    if(!isEmItialized) {
        InitErrorMessages();
        isEmItialized = true;
    }
 
    map<ERROR_CODE, string>::iterator it;
    it = em.find(rc);
    if(it != em.end()) {
        return it->second;
    } else {
        return string("Unknown error!");
    }
}
 
static void InitErrorMessages() {
    em[OK]                      = "No erro";
    em[PARSING_ERROR]           = "Expression parsing error";
    em[FUNCTION_NOT_FOUND]      = "Solving function was not found";
    em[UNKNOWN_PROBLEM]         = "Unknown problem type";
    em[WRONG_FUNC]              = "Wrong function";
    em[NO_SOLUTION]             = "No solution";
    em[NOT_ALL_CONDITIONS_IN_ODE] = "The task is not completed. Not all conditions are specified";
}
Когда программа входит в инициализацию em карты, то на первой же строчке всё крашится... ничего не пишется.
Я, вообще, корректно использую и инициализирую map тут?

Если подробнее крашится где-то внутри карты на строке
C++
1
2
3
4
5
_Self&
      operator--()
      {
    _M_node = _Rb_tree_decrement(_M_node);
         ...
ERROR_CODE просто перечисление...

Добавлено через 11 минут
При чём есть точно такой же модуль для ошибок другого типа и в нём всё работает... Ничего не вылетает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2014, 15:47     Инициализация static map
Посмотрите здесь:

C++ static-член
C++ Инициализация static переменной
C++ static и const
Static Library C++
Static C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.04.2014, 16:01     Инициализация static map #2
Цитата Сообщение от unkarjedy Посмотреть сообщение
входит в инициализацию em карты
Это в функцию InitErrorMessages() имеется в виду?
Какой компилятор?
unkarjedy
3 / 3 / 0
Регистрация: 13.03.2011
Сообщений: 114
08.04.2014, 16:11  [ТС]     Инициализация static map #3
Да про неё. Компилятор MinGW.
Visual Studio нормально обрабатывает...
Опять же MinGW один такой же файл (идентичный, разница только в именах) тоже...
А в этом модуле вылетает SEGMENTATION_FAULT и всё
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.04.2014, 16:20     Инициализация static map #4
unkarjedy, использования глобальных переменных из одного модуля для инициализации глобальных переменных в другом модуле есть?
Одновременно InitErrorMessages() из разных потоков не может вызываться (если они есть конечно)?
unkarjedy
3 / 3 / 0
Регистрация: 13.03.2011
Сообщений: 114
08.04.2014, 19:55  [ТС]     Инициализация static map #5
Нет
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.04.2014, 20:51     Инициализация static map #6
Цитата Сообщение от unkarjedy Посмотреть сообщение
крашится где-то внутри карты на строке
В какой момент туда попадает? Стек вызовов посмотреть имеет смысл.
Yandex
Объявления
08.04.2014, 20:51     Инициализация static map
Ответ Создать тему
Опции темы

Текущее время: 16:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru