Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态数组导致HashMap内存泄漏_C++_Memory Leaks - Fatal编程技术网

C++ 动态数组导致HashMap内存泄漏

C++ 动态数组导致HashMap内存泄漏,c++,memory-leaks,C++,Memory Leaks,我正在尝试创建自己的HashMap,以了解它们是如何工作的。我使用一个链表数组来存储hashmap中的值(字符串) 我创建的数组如下所示: Node** list; 与此相反: Node* list[nSize]; 这使得数组在运行时可以是任意大小。但我想我的内存泄漏是因为我这么做的缘故。我不知道错误在哪里,但是当我运行下面的简单代码时.exe崩溃了 为什么我的应用程序会崩溃?我如何修复它? 注意:我知道使用向量比使用数组要好得多,但这只是为了学习,我想挑战自己使用“动态”数组创建hashm

我正在尝试创建自己的HashMap,以了解它们是如何工作的。我使用一个链表数组来存储hashmap中的值(字符串)

我创建的数组如下所示:

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;