Qt c++;如何在加载新HTML页面后释放内存 我在HTML/CSS中用C++做QT应用程序。
每次我加载一个新的html页面(或者如果我重新加载一个页面),应用程序都会获得+5mo内存,退出后不会获得自由。(因此,在10页之后,我获得了+50mo内存) 我已经准备好将我的页面加载到一个向量中,但是每次加载都会增加5百万。 我还考虑过在线程中加载页面,这样在使用后它们就会被销毁。 保持下降闸板重量是一种可行的解决方案吗 由于我是一个新手,我可能在做一些愚蠢的事情:下面是我加载新视图的代码:Qt c++;如何在加载新HTML页面后释放内存 我在HTML/CSS中用C++做QT应用程序。,html,c++,qt,ram,Html,C++,Qt,Ram,每次我加载一个新的html页面(或者如果我重新加载一个页面),应用程序都会获得+5mo内存,退出后不会获得自由。(因此,在10页之后,我获得了+50mo内存) 我已经准备好将我的页面加载到一个向量中,但是每次加载都会增加5百万。 我还考虑过在线程中加载页面,这样在使用后它们就会被销毁。 保持下降闸板重量是一种可行的解决方案吗 由于我是一个新手,我可能在做一些愚蠢的事情:下面是我加载新视图的代码: Q_INVOKABLE bool myBridge::newView(
Q_INVOKABLE bool myBridge::newView(QString page)
{
QString path = ("file:///" + QDir::currentPath() + "/");
if (!(page.compare("page3.html")))
_mediaPlayer->setTimer(10000);
else
_mediaPlayer->setTimer(60000);
_view->close();
_view = new WebView;
_view->load(QUrl(path + page));
_view->page()->mainFrame()->addToJavaScriptWindowObject("bridge", this);
_view->showFullScreen();
_mediaPlayer->_srnsaver->timerRestart();
return (true);
}
您能看到此代码中有错误吗?每次调用此方法时,您都会创建一个新的
WebView
,并且很可能永远不会删除上一个。这自然会导致内存泄漏,因为没有释放任何内容。调用close()
不会删除对象。您在函数中创建了一个新的WebView
,但您似乎从未删除过旧的视图?我将尝试将_视图放在TMPview中,以laod我的新页面,并将旧的initialize视图删除为nullptr
(或0
或NULL
)在执行new
之前,只需调用dodelete
。哦,在尝试通过调用\u view->close()
取消对指针的引用之前,请检查空指针。初始化\u view to nullptr对+5mo://\u view->close()没有帮助_视图=空ptr;删除(u)视图;_视图=新的网络视图;顺便说一句,视图永远不会为空删除导致我发信号:/n您需要删除以前的webviev。如果你调用close()
或删除空指针(或未初始化),因为你甚至没有检查\u view
是否指向某个地方,你会得到sigsegv。@EtienCenter你是否在开始时将\u view
初始化为空以确保它不指向内存中的随机位置?我使用“new”作为视图的开头,我知道它不是空的?不但我试试看ty@EtienneCtrs在调用此方法之前?然后它被初始化,删除它不应该引起问题。但是如果仅在这个方法中,您在new
之前调用close()
和delete
。