我正在尝试创建一个指针数组。
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&amp; y
我尝试打印它:
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语句的最后一行遇到了一个seg错误,我很困惑为什么当数组应该为空时函数会转到else语句,因此在第一次运行函数时,hobbies [key]应为null?
答案 0 :(得分:3)
你至少有两个错误。
hobbylist *h = new hobbylist;
h->hobby = hobby1;
hobbies[key] = h;
key
是您的哈希键。如果hobbies[key]
已有指针,则会泄漏内存。
for(auto const& value: hobbies)
{
cout << value->hobby << ":" << endl;
}
这假设hobbies
哈希数组中的每个槽都包含一个指针。这不太可能。如果value
中的特定hobbies
从未初始化(以前插入的hobbies
没有映射到该散列键),则指针将为NULL
,{{1将尝试取消引用value->hobby
指针,从而导致未定义的行为。那可能是你的崩溃。