2014-10-17 146 views
0

如何停止此內存泄漏。在的.cpp內存泄漏void *

m_Map.resize(450); 
m_mapRegion = &m_map[0]; 

然後我用m_mapRegion通過地址來訪問矢量

static std::vector< uint32_t> m_Map; 
void* m_mapRegion 

然後,一切都OK:

我創建了這樣的載體在頭中。當我刪除對象時,測試工具會標記內存泄漏。我怎樣才能擺脫錯誤?謝謝。

我嘗試這樣做:

m_Map.clear(); 
m_mapRegion = NULL; 

什麼是正確的方法是什麼?

給出的錯誤信息是:

HWTests.cpp:188: error: Failure in TEST(HW, Test) 
Memory leak(s) found. 
Alloc num (653) Leak size: 2400 Allocated at: <unknown> and line: 0. Type: "new" 
Memory: <0x11b2a70> Content: "" 
Total number of leaks: 1 

在測試所有我做的是這樣的:

HW HWAccessor; //This line causes the error. 
+0

您已聲明該矢量爲靜態,所以這可能是您從測試工具中獲得誤報的原因 – 2014-10-17 06:57:05

+0

如何刪除該對象? – Bathsheba 2014-10-17 06:57:50

+0

什麼是'HW'?你可以把你的問題歸結爲一個獨立的,小的,可編輯的例子嗎? – nvoigt 2014-10-17 07:01:08

回答

3

你從來沒有真正叫new動態分配內存,因此調用delete是沒有必要的。

+0

這就是我在想什麼,所以這真的是內存泄漏? – user1876942 2014-10-17 06:51:40

+1

不,不是。但是如果你的代碼實際上包含一個'delete',我可以很容易地看到所有不好的事情發生。你從未展示過那部分。也許你應該發佈所有的代碼和警告。 – nvoigt 2014-10-17 06:52:40

+0

代碼中沒有刪除。 – user1876942 2014-10-17 06:53:15

0

vector::clear可能不一定釋放堆中的內存。它只是清理矢量,因此size將報告0。該載體必須銷燬,或std::swap與另一個臨時vector。臨時應該很快就不復存在。

{ 
    vector<uint32_t> temp; 
    std::swap(temp, m_Map); 
}