Я пытаюсь создать массив указателей.Странный вывод при попытке печати из массива указателей C++
struct vertex
{
std::string id;
std::string name;
int networkID;
std::vector<adjVertex> friends;
bool visited;
};
struct hobbylist
{
std::string hobby;
std::vector<vertex*> list;
};
hobbylist * hobbies[HASHMAP_SIZE];
добавления пользователя в массив хобби:
int Graph::addUserToHobby(std::string hobby1, std::string id){
// initial key is based on the first 2 characters of the hobby name
int key = (hobby1[0] + hobby1[1]) % HASHMAP_SIZE;
cout << " initial hashmap key " << key << endl;
hobbylist *h = new hobbylist;
h->hobby = hobby1;
hobbies[key] = h;
}
моя цель состоит в том, чтобы создать массив указателей с типом hobbylist, при попытке распечатать содержимое этого массива, я в конечном итоге с очень странно случайный выходной символ:
GLIBC_2.2.5GLIBCXX_3.4.13GLIBCXX_3.4.14CXXABI_1.3GLIBCXX_3.4 P & у
попытке печати это как это:
void Graph::displayHobbies(){
cout << "========================================\n";
cout << "DISPLAYING HOBBY INTERESTS =============" << endl;
for(auto const& value: hobbies)
{
cout << value->hobby << ":" << endl;
}
}
Мне было интересно, если я печать неправильно или если я добавляю хобби к массиву хобби неправильно.
Изменен код:
hobbylist *h = new hobbylist;
h->hobby = hobby1;
if(hobbies[key] ==NULL){
h->list.push_back(user);
hobbies[key] = h;
}
else if (hobbies[key]!=NULL){
h= hobbies[key];
h->list.push_back(user);
}
Изменен код выше, и я получаю ошибку сегм на последнюю строку в операторе еще при запуске функции в первый раз, и я запутался, почему функция пойдет оператор else, когда массив должен быть пустым, и поэтому хобби [ключ] должен быть пустым при первом запуске функции?
Инициализировать указатели массива на 'nullptr' (' hobbylist * hobbies [HASHMAP_SIZE] {} ') и проверить это перед печатью (' if (value) {std :: cout << value-> hobby << ":" << станд :: епсИ;} '). – Jarod42
Или даже лучше, используйте массив 'std :: unique_ptr', чтобы избежать ручного управления памятью. –
Jarod42
Может быть, 'std :: map' (или 'std :: unordered_map') будет иметь больше смысла, поскольку хобби вводятся по имени, что и подходит для« карты ». –