【发布时间】:2017-03-14 18:38:07
【问题描述】:
我的 Wt Web 应用程序有问题。这是一个相当简单的应用程序,我不需要将它部署在任何外部服务器(仅本地主机)上,因此框架提供的内置 whttpd 服务器足以满足我的需求。我在发布模式(Visual Studio 2015)下创建了一个可执行文件,运行它,当我在浏览器中打开 localhost:8080 访问应用程序时,出现错误。但是在调试模式下一切正常。
调试控制台显示:
在 0x00007FFB08477788 处抛出异常 Neural_network_visualisation.exe:Microsoft C++ 异常: 内存位置 0x00000025E30FB408 处的 std::runtime_error。
检测到严重错误 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 经验的人可以帮我解决这个问题吗?
编辑 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);
}
现在错误有所不同,并指出:
HEAP[Neural_network_visualisation.exe]:指定的地址无效 RtlValidateHeap(000002A04F550000, 000002A05117F060)
所以这是一个内存管理问题。在调试模式下,此管理的工作方式与发布时完全不同,这就是为什么我在调试时没有收到任何错误。不幸的是,我仍然不知道如何解决这个问题。有什么想法吗?
【问题讨论】:
-
c0000374是STATUS_HEAP_CORRUPTION。可能是双重释放或释放到错误的堆? -
问题是,Wt框架应该是内置内存管理的,不需要手动释放内存。再一次,在调试模式下,这段代码可以完美运行。问题仅出现在发行版中。
-
你试过在调试器中运行它吗?
-
是的,它可以完美运行。仅当我运行在发布模式下创建的 .exe 文件时才会弹出错误。
-
你试过在调试器中运行 release 版本吗?
标签: c++ visual-studio-2015 wt