2016-11-01 8 views
0

У меня проблема с моим веб-приложением 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)

Так что это проблема управления памятью. В режиме отладки это управление работает совершенно иначе, чем в выпуске, поэтому я не получаю никаких ошибок при отладке. К сожалению, я до сих пор не знаю, как это исправить. Есть идеи?

+0

'c0000374' является' STATUS_HEAP_CORRUPTION'. Вероятно, это двойная или свободная ошибка? – Ben

+0

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

+0

Вы пробовали запустить его в отладчике? – Ben

ответ

0

Проблема решена. Я все еще не могу точно сказать, в чем причина, но я перекомпилировал библиотеки Wt и Boost и изменил свойства проекта в соответствии с примерами Wt. Мне также пришлось изменить тип сборки с x64 на x86. Он работает сейчас.