C++ 动态数组导致HashMap内存泄漏
我正在尝试创建自己的HashMap,以了解它们是如何工作的。我使用一个链表数组来存储hashmap中的值(字符串) 我创建的数组如下所示:C++ 动态数组导致HashMap内存泄漏,c++,memory-leaks,C++,Memory Leaks,我正在尝试创建自己的HashMap,以了解它们是如何工作的。我使用一个链表数组来存储hashmap中的值(字符串) 我创建的数组如下所示: Node** list; 与此相反: Node* list[nSize]; 这使得数组在运行时可以是任意大小。但我想我的内存泄漏是因为我这么做的缘故。我不知道错误在哪里,但是当我运行下面的简单代码时.exe崩溃了 为什么我的应用程序会崩溃?我如何修复它? 注意:我知道使用向量比使用数组要好得多,但这只是为了学习,我想挑战自己使用“动态”数组创建hashm
Node** list;
与此相反:
Node* list[nSize];
这使得数组在运行时可以是任意大小。但我想我的内存泄漏是因为我这么做的缘故。我不知道错误在哪里,但是当我运行下面的简单代码时.exe崩溃了
为什么我的应用程序会崩溃?我如何修复它?
注意:我知道使用向量比使用数组要好得多,但这只是为了学习,我想挑战自己使用“动态”数组创建hashmap。PS:这是我使用的数组类型的正确术语(动态数组)吗
struct节点
{
//实施
};
类哈希映射
{
公众:
HashMap(int-dynSize)
{
*列表=新节点[dynSize];
尺寸=动态尺寸;
对于(int i=0;i,您需要遵循
提供复制构造函数和复制分配运算符,用于生成动态分配成员的深度副本
此外,
Node** list;
*list = new Node[dynSize];
只是延迟未初始化的指针。*list
没有指向任何有意义的东西,因为list
从未初始化过。正如Alok Save提到的,您正在取消对未初始化指针的引用。这里的关键是您有一个双指针,需要两步初始化。首先,您必须分配内存to列表
:
// note that I'm using 'X', simply using 'size' doesn't work for two dimensions
list = new Node*[X];
既然有了X节点指针,就需要将每个节点都指向Y节点
for (int i = 0; i < X; i++)
list[i] = new Node[Y];
for (int i = 0; i < X; i++)
list[i] = new Node[Y];
for (int i=0; i < X; i++)
delete[] list[i];
delete[] list;