c++ - 由于动态数组导致的 HashMap 内存泄漏

标签 c++ memory-leaks

我正在尝试创建自己的 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];

只是引用一个未初始化的指针。 *listlist 以来未指向任何有意义的内容从未被初始化。

关于c++ - 由于动态数组导致的 HashMap 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889254/

相关文章:

c++ - 如何在一行中将输入流重定向到输出流?

c++ - 传递给函数的 Default_random_engine 提供可重复的结果

android - 位图大小超出 VM 预算,不明白为什么

c++ - 这段代码有什么问题?为什么显示 : Debug assertion failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)?

ios - 使用 dispatch_semaphore 时泄漏

c++ - 正常 block 后检测到堆损坏

c++ - Visual Studio 2012 错误 C2039 : 'serialize' : is not a member of 'std::shared_ptr<_Ty>'

C++:简单递归搜索函数的运行时错误

c++ - 取消选中/选中 QCheckBox 后使 QLabel 不可见/可见

java - 在 java restful api 中查找内存泄漏