У меня проблема с моим веб-приложением Wt. Это довольно простое приложение, мне не нужно разворачивать его на каком-либо внешнем сервере (только localhost), поэтому встроенный сервер whttpd, предоставляемый инфраструктурой, достаточен для моих нужд. Я создаю исполняемый файл в режиме выпуска (Visual Studio 2015), запускаю его, и когда я открываю localhost: 8080 в браузере для доступа к приложению, я получаю сообщение об ошибке. Однако в режиме отладки все работает хорошо.Wt C++ критическая ошибка при создании объекта WApplication
Debug консоль показывает это:
Exception брошенного в 0x00007FFB08477788 в Neural_network_visualisation.exe: Microsoft C++ исключения: станда :: runtime_error в ячейке памяти 0x00000025E30FB408.
Критическая ошибка обнаружена c0000374
Neural_network_visualisation.exe вызвало точку останова.
main.cpp
#include "MyApplication.h"
#include "MyContainerWidget.h"
WApplication *createApplication(const WEnvironment& env) //exception is thrown here
{
Wt::WApplication *app = new Wt::WApplication(env); //error c0000374
app->setCssTheme("polished");
new MyContainerWidget(app->root());
return app;
}
int main(int argc, char **argv)
{
return WRun(argc, argv, &createApplication);
}
Исключение брошено только после ввода функции createApplication, но программа не врезаться там. После выполнения первой строки отображается критическая ошибка, и приложение останавливается.
Код настолько прост, что я не вижу никаких проблем с ним. Я предполагаю, что режим выпуска ожидает, что какая-то специальная конфигурация будет работать с Wt, но официальная документация не упоминает, что требуется больше всего при использовании встроенного HTTP-сервера. Может ли кто-нибудь с опытом Wt помочь мне в этом?
Edit 1:
Я изменил код так, это выглядит следующим образом:
#include "MyApplication.h"
#include "MyContainerWidget.h"
WApplication *createApplication(const WEnvironment& env)
{
//Wt::WApplication *app =
// app->setCssTheme("polished");
//new MyContainerWidget(app->root());
return new Wt::WApplication(env);;
}
int main(int argc, char **argv)
{
return WRun(argc, argv, &createApplication);
}
Теперь ошибка отличается и состояний:
НЕАР [Neural_network_visualisation.exe]: Invalid адрес, указанный для RtlValidateHeap (000002A04F550000, 000002A05117F060)
Так что это проблема управления памятью. В режиме отладки это управление работает совершенно иначе, чем в выпуске, поэтому я не получаю никаких ошибок при отладке. К сожалению, я до сих пор не знаю, как это исправить. Есть идеи?
'c0000374' является' STATUS_HEAP_CORRUPTION'. Вероятно, это двойная или свободная ошибка? – Ben
Проблема состоит в том, что в структуре Wt предполагается встроенное управление памятью, нет необходимости освобождать память вручную. Еще раз, в режиме отладки этот код работает отлично. Проблема появляется только в выпуске. – BJanusz
Вы пробовали запустить его в отладчике? – Ben