以下類繼承是代碼片段:內存泄漏在C++
}
[更新]:
class Hashtable
{
private :
//counts the number of elements added into the hashtable
unsigned int count_elements_added;
//counts the number of elements removed from the hashtable
unsigned int count_elements_removed;
//counts the number of elements present in the hashtable
unsigned int count_elements_present;
//sets the size of the hashtable
unsigned int hashtable_size;
//the data structure (vector) that contains the objects
//the position on the hastable is defined by 2 keys
//one the position in the array of the hashtable : the start of the node is used
//the second is the first element in the pair present in the hash table //end of the node is used
std :: vector< std :: vector<std :: pair<int,int> > > hashtable;
//intialize the hashtable
void intialize_hashtable();
//checks whether the hashtable is corrupted or not
//returns true,if the hashtable is corrupted
//else returns false
bool is_corrupt();
public :
Hashtable()
{
hashtable_size = DEFAULT_HASHTABLE_SIZE;
hashtable.clear();
intialize_hashtable();
//counts the number of elements added into the hashtable
count_elements_added = 0;
//counts the number of elements removed from the hashtable
count_elements_removed = 0;
//counts the number of elements present in the hashtable
count_elements_present = 0;
};
Hashtable(int hash_table_size)
{
hashtable.clear();
hashtable_size = hash_table_size;
intialize_hashtable();
//counts the number of elements added into the hashtable
count_elements_added = 0;
//counts the number of elements removed from the hashtable
count_elements_removed = 0;
//counts the number of elements present in the hashtable
count_elements_present = 0;
};
//add elemnet to the hashtable
void add_element(int key,int object_identifier,int object_info);
//given the key and the object identifier
//returns the object info
int get_element(int key,int object_identifier);
//delete the element from the hashtable
void remove_element(int key,int object_identifier);
//prints the contents of the hashtable
void print();
~Hashtable()
{
hashtable_size = 0;
hashtable.clear();
//counts the number of elements added into the hashtable
count_elements_added = 0;
//counts the number of elements removed from the hashtable
count_elements_removed = 0;
//counts the number of elements present in the hashtable
count_elements_present = 0;
};
};
create_size_one_nodes的目的在主創建。 但是當它超出範圍時,內存不會被釋放。
Create_size_one_Nodes create_size_one_Nodes_object;
create_size_one_Nodes_object.create_nodes_size_one();
我無法刪除delete(nodes_hastable)中的內存。 valgrid指出代碼中有泄漏。 的vakgrind輸出爲:
==16451== 27,692 (28 direct, 27,664 indirect) bytes in 1 blocks are definitely lost in loss record 7 of 7
==16451== at 0x402A208: operator new(unsigned int, std::nothrow_t const&) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==16451== by 0x80E05FF: Adjacency_list::create_nodes_hashtable() (adjacency_list.cpp:75)
請指導我如何刪除此內存泄漏
顯示更多代碼,特別是'create_nodes_hashtable()'。什麼是'node_hastables'類型? –
你的構造函數和析構函數都是私有的。我很驚訝你是如何從課堂外創建'Create_size_one_Nodes'的對象的。 – rajenpandit
@MichaelWalz我同意。我有一種感覺,node_hashtable只是一個指向數組的指針,它不會迭代並刪除該數組中的所有已分配的內存。 – CoryKramer