Функция развернуть неправильно расширяется для моего графика

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

private:

//list is pointers to vertex nodes;

struct vertex_node {
string name;
set <string> edges;
};

vertex_node **list;

void Graph:: expand()
{

int new_cap = capacity * 2+1;
//creates new larger array
vertex_node **larger_array = new vertex_node*[new_cap];

//loop through all elements of old array
for(int i = 0; i<capacity; i++){
if(list[i] != NULL){

//rehash each element and place it in new array
int a = hash_string(list[i]->name) % new_cap;

larger_array[a]         = new vertex_node;
larger_array[a]->name   = list[i] -> name;
larger_array[a]->edges  = list[i] -> edges;
}

//delete old list
delete[] list;
list = larger_array;
capacity = new_cap;
}
}

1

Решение

как я уже упоминал в моем комментарии выше, вы аннулируете весь массив в конце 1-й итерации. Ваша попытка избежать утечки памяти заслуживает высокой оценки, но она должна быть сделана в 2 местах.

    for(int i = 0; i<capacity; i++){
if(list[i] != NULL){

//rehash each element and place it in new array
int a = hash_string(list[i]->name) % new_cap;

larger_array[a]         = new vertex_node;
larger_array[a]->name   = list[i] -> name;
larger_array[a]->edges  = list[i] -> edges;
}

//clean up every memory location once you're done with it
delete list[i];
list = larger_array;
capacity = new_cap;
}
//clean the whole array at the very end
delete[] list;
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector