【发布时间】:2012-08-10 07:00:31
【问题描述】:
我写了这个哈希图(这是电话面试练习的一部分),当我放一个元素时,我做了一个new Node(key, value)。我想确保在哈希图本身超出范围时进行清理。
我在这里错过了什么吗?有什么方法可以检查是否存在内存泄漏?
class HashMap {
private:
list<Node*> data[SIZE];
public:
~HashMap();
Node* get(int key);
void put(int key, int value);
int hashFn(int val){ return val % 13; }
};
HashMap::~HashMap(){
for(int i = 0; i < SIZE; ++i){
list<Node*>& val = data[i];
for(list<Node*>::iterator it = val.begin(); it != val.end(); it++){
Node* n = *it;
delete n;
}
}
}
对于古玩:完整代码在这里:http://rextester.com/EHPCYW12862
编辑:
另外,我真的需要最后调用 list.clear() 吗(因为我已经释放了列表中的所有节点)?
【问题讨论】:
-
看起来不错,但使用智能指针会更好
-
使用boost::ptr_list,问题就解决了。
-
你为什么不使用列表向量呢?
-
这是一个面试问题,所以不能使用externals :)
-
@AndersK :我想要一个固定大小的数组,而不是会增长的东西。 (查看我提供的链接,了解我是如何实现它的)。只有
SIZE -1的桶数,因此我不需要数组增长。
标签: c++ memory memory-leaks hashmap