我正在尝试创建自己的 HashMap 以了解它们的工作原理。我正在使用一个链接列表数组将值(字符串)存储在我的 HashMap 中。
我正在创建这样的数组:
Node** list;
取而代之的是:
Node* list[nSize];
这样数组在运行时可以是任意大小。但是我认为由于我这样做的原因,我正在发生内存泄漏。我不知道错误在哪里,但是当我运行以下简单代码时,.exe 崩溃了。
为什么我的应用程序崩溃了,我该如何解决?
注意:我知道使用 vector 会比数组好得多,但这只是为了学习,我想挑战自己使用“动态”数组创建 HashMap 。 PS:对于我正在使用的数组类型,这是正确的术语(动态数组)吗?
struct Node
{
// to implement
};
class HashMap
{
public:
HashMap(int dynSize)
{
*list = new Node[dynSize];
size = dynSize;
for (int i=0; i<size; i++)
list[i] = NULL;
cout << "END\n";
}
~HashMap()
{
for (int i=0; i<size; i++)
delete list[i];
}
private:
Node** list; // I could use a vector here but I am experimenting with a pointer to an array(pointer), also its more elegant
int size;
};
int main()
{
// When I run this application it crashes. Where is my memory leak?
HashMap h(5);
system("PAUSE");
return 0;
}
最佳答案
您需要关注 Rule of Three 强>。
提供复制构造函数和复制赋值运算符,对动态分配的成员进行深度复制。
此外,
Node** list;
*list = new Node[dynSize];
只是引用一个未初始化的指针。 *list
自 list
以来未指向任何有意义的内容从未被初始化。
关于c++ - 由于动态数组导致的 HashMap 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889254/