2015-12-08 9 views
0

我在使用Html/Css的前端在C++中執行Qt應用程序。Qt C++如何在加載新的HTML頁面後釋放內存

每次我加載一個新的HTML頁面(或者如果我重新加載一個),應用程序得到+ 5mo ram,並且退出後不會自由。 (所以在10頁後我得到+ 50mo ram)

我已經嘗試將我的頁面加載到一個向量中,但是每次加載仍然會加5mo。 我也想過在線程中加載頁面,所以在使用後它們會被銷燬。 這是一個可能的解決方案,以保持下降公羊體重?

正如我'是新手我'可能做一些愚蠢的事:這是我的加載一個新視圖代碼:

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); 
} 

你能看到一些錯誤的代碼?

+0

您在函數中創建了一個新的'WebView',但是您似乎從未刪除舊的? –

+0

我會嘗試在TMPview中放置_view來放置我的新頁面並刪除舊的 –

+0

在執行'new'前初始化'_view'到'nullptr'(或'0'或'NULL'),並調用do'delete' 。哦,並且在通過調用'_view-> close()'試圖解引用指針之前,檢查*空指針。 –

回答

0

每次調用此方法時,都會創建一個新的WebView,並且很可能永遠不會刪除前一個。當然這會導致內存泄漏,因爲沒有任何東西被釋放。調用close()不會刪除該對象。

+0

刪除導致我一個sigsegv:/ –

+0

你需要'刪除'以前的webviev。如果你調用'close()'或刪除NULL指針(或未初始化的),因爲你甚至不檢查'_view'指向什麼地方,你會得到sigsegv。 –

+1

@EtienneCtrs你是否在開始時將'_view'初始化爲NULL,以確保它不指向內存中的隨機位置? –