2013-11-15 67 views
0

我有一個類HashMap,並且一切似乎都正常工作,但是我有一個memoryleaks問題。刪除C++類(valgrind檢查)

下面是我的HashMap類私有成員變量/函數

struct Node 
    { 
     std::string key; 
     std::string value; 
     Node* next; 
    }; 

    HashFunction hashfunction; 
    Node** bucketList; 
    int* numberOfPairs; 
    int logins; 
    int lengthOfMap; 

,這裏是我的默認構造函數:

HashMap::HashMap() 
    :hashfunction(hash), bucketList(bucketList = new Node*[INITIAL_BUCKET_COUNT]), numberOfPairs(numberOfPairs = new int[INITIAL_BUCKET_COUNT]), 
    logins(0),lengthOfMap(INITIAL_BUCKET_COUNT) 
{ 
    for(int i = 0; i < INITIAL_BUCKET_COUNT; i ++) 
    { 
     bucketList[i] = nullptr; 
    } 
    zeroFillArray(numberOfPairs, INITIAL_BUCKET_COUNT); 
} 

我遺願清單指針,指向節點的數組,每個節點指向鏈表的開始。

截至目前,這是我的析構函數:

HashMap::~HashMap() 
{ 
    delete numberOfPairs; 
    delete bucketList; 
} 

如何刪除每一個節點(我將在上午解決這個問題,但我想問問如何)列表中之前,我刪除列表,還是我完全錯過了別的東西?

+0

你爲什麼不讀了Valgrind的產生診斷和這出自己呢? –

+0

是的,你刪除每個節點。指針永遠不會刪除自己。 – john

回答

3
HashMap::~HashMap() 
{ 
    for(int i = 0; i < INITIAL_BUCKET_COUNT; i ++) 
    { 
     Node* node = bucketList[i]; 
     while(node != nullptr) 
     { 
      Node* next = node->next; 
      delete node; 
      node = next; 
     } 
    } 
    delete numberOfPairs; 
    delete[] bucketList; 
} 
+0

這是否刪除指向bucketList [i]中第一個節點的每個指針?這似乎只會刪除鏈接列表而不刪除第一個節點指針。 – LeoVannini

0

您有指南從您的bucketList刪除每個節點。說手動我的意思是你應該去扔每個節點,並刪除它。 像這樣:

HashMap::~HashMap() 
{ 
    for(int i = 0; i < INITIAL_BUCKET_COUNT; ++i) 
    { 
     if(bucketList[i]) 
     { 
      Node* first = bucketList[i]; 
      while(first) 
      { 
       Node* temp = first->next; 
       delete first; 
       first = temp; 
      } 
     } 
    } 
    delete[] bucketList; 
    delete numberOfPairs; 
}