2013-12-05 4 views
0

Я пытаюсь написать хэш-карту, но конструктор не будет выделять память, может кто-то мне помочь, я новичок в коде, извините за беспокойство, ребята, но я буду действительно ценится за вашу помощь.Почему мой конструктор не может выделить память

class HashMap { 
private: 
    HashEntry **table; 
    int count; 
    int TABLE_SIZE; 
public: 
    HashMap() 
    { 
     TABLE_SIZE = 128; 
     table = new HashEntry*[TABLE_SIZE]; 
     for (int i = 0; i < TABLE_SIZE; i++) 
       table[i] = NULL; 
     count=0; 
    } 
} 

class HashEntry 
{ 
private: 
     int key; 
     int value; 
public: 
    HashEntry(){} 
    ~HashEntry(){} 
     HashEntry(int key, int value) { 
      this->key = key; 
      this->value = value; 
     } 

     int getKey() { 
      return key; 
     } 

     int getValue() { 
      return value; 
     } 

     void setValue(int value) { 
      this->value = value; 
     } 
}; 

Когда он работает,

table = new HashEntry*[TABLE_SIZE]; 

таблица не смог прочитать память, я новичок в кодировании, плз дать мне некоторую помощь, спасибо!

+2

Что означает «таблица не может прочитать память»? Что происходит, что вы ожидали? – nos

+0

Замечание: 3 строки в середине конструктора можно ввести более кратко: 'table = new HashEntry * [TABLE_SIZE]();' –

+0

Это ваш фактический код? Он компилирует (когда я добавляю объявление fwd и отсутствующий полуплот) и работает нормально в VS2012, хотя, очевидно, будет утечка памяти – doctorlove

ответ

0

Вы можете создать массив своих объектов через malloc(), что позволяет динамически распределять память. Я еще не смог проверить этот код, но он должен работать так, как он есть:

HashEntry* table; 
int TABLE_SIZE; 

HashMap(){ 

TABLE_SIZE = 128; 
table = (HashEntry*)malloc(sizeof(HashEntry) * TABLE_SIZE); 

    for(int i = 0; i < TABLE_SIZE; i++){ 

    table[i] = NULL; //If you want to create your objects, you need to replace `NULL` with `new HashEntry()` 

    } 

} 
Смежные вопросы