Стек вокруг переменной был поврежден при использовании кода из библиотеки

Я использую библиотеку log4cplus. Когда я создаю приложение, оно компилируется и работает правильно (ну, не совсем правильно, поскольку оно ничего не регистрирует, но это другая проблема), но когда я закрываю его, я получаю эту ошибку:

Run-Time Check Failure #2 - Stack around the variable 's1' was corrupted.

Вот мой код Я отметил соответствующие места с комментариями.

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR    lpCmdLine,
_In_ int       nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

////////////////// SET UP CHECKS FOR MEMORY LEAKS ////////////////////
_CrtMemState s1;
_CrtMemCheckpoint(&s1);
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
//////////////////////////////////////////////////////////////////////

log4cplus::PropertyConfigurator config(_T("log.properties")); // <-- this line seems to be responsible for the issue. When I remove it, everything is ok.

_CrtMemDumpAllObjectsSince(&s1); // <-- here program breaks with mentioned error.

return 1;
}

Итак, как написано в комментариях, PropertyConfigurator() Конструктор, кажется, несет ответственность за проблему. Ни один другой код в этом месте не вызывает такую ​​же проблему.

Интересно, что может быть не так, если эта библиотека используется многими людьми, и она работает, хотя у меня есть проблемы с повреждением стека.

Кто-нибудь имеет представление о том, что здесь происходит?

РЕДАКТИРОВАТЬ:

Я удалил весь ненужный код (код выше отредактирован) и оставил только соответствующий. Еще log4cplus::PropertyConfigurator config(_T("log.properties")); кажется, причина проблемы.

4

Решение

Эта ошибка Run-Time Check Failure #2 как правило, вызвано ошибкой где-то в памяти. После просмотра предоставленного вами образца вы должны изменить это:

log4cplus::PropertyConfigurator config(_T("log.properties"));

к этому:

log4cplus::PropertyConfigurator configure(_T("log.properties"));

Если это не помогает, тогда начните смотреть на инициализации памяти.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector