2014-10-17 149 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); 
}