//Constructor
page_frames = (Page*) malloc(page_count*PAGE_SIZE);
for (uint32_t i = 0 ; i < page_count; i) {
page_frames = new Page[PAGE_SIZE];
page_frames ;
}
//Destructor
free(page_frames)
page_frames 是 Page* 型別的成員變數。無論我是否嘗試在解構式中釋放記憶體,valgrind 都會回傳“無效的 free()/delete/delete[]/realloc()”。
我想釋放 malloc() 留下的記憶體以防止任何泄漏。有沒有辦法釋放類解構式中成員變數的記憶體?
uj5u.com熱心網友回復:
我假設page_frames是Page* page_frames在您的類宣告中宣告的成員變數。你正在嘗試創建一個“頁面陣列”
這個:
page_frames = (Page*) malloc(page_count*PAGE_SIZE);
for (uint32_t i = 0 ; i < page_count; i) {
page_frames = new Page[PAGE_SIZE];
page_frames ;
}
有幾個問題。最初的 malloc'dpage_frames在回圈的第一次迭代中被new呼叫覆寫。另一個問題是 pages_frames 本身每次呼叫時都會調整為其他內容page_frames 。因此,您的free(page_frames)陳述句不會傳遞從 malloc 回傳的值。
選項1
這更接近你想要的:
page_frames = (Page*) malloc(page_count*PAGE_SIZE);
for (uint32_t i = 0 ; i < page_count; i) {
page_frames[i] = {}; // default construct a page
}
但這是使用 C 分配語意而不是 C 樣式的物件分配。我們可以做得更好。
選項 2
繼續使用 C 分配語意。
這更簡單,不需要for回圈
page_frames = new Page[page_count];
而你相應的解構式陳述句是這樣的;
delete [] page_frames;
選項 3
不需要明確的分配/洗掉。讓 C 集合類別庫為您完成繁重的作業。
宣告page_frames為std::vector<Page>。
你的建構式就是這樣的:
page_frames.resize(page_count);
并且不需要解構式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512397.html
標籤:C
上一篇:正則運算式未正確評估字串
下一篇:在解構式中獲取鎖是一個壞主意嗎?
