尝试从指针数组c ++打印时输出奇怪

时间:2016-12-01 23:43:31

标签: c++ arrays

我正在尝试创建一个指针数组。

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?

1 个答案:

答案 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指针,从而导致未定义的行为。那可能是你的崩溃。