gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:28:17 25 4
gpt4 key购买 nike

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

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&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 语句的最后一行遇到了段错误,我很困惑为什么当数组应该为空时函数会转到 else 语句,因此hobbies[key] 应该在函数第一次运行时为 null?

最佳答案

你至少有两个错误。

hobbylist *h = new hobbylist;
h->hobby = hobby1;
hobbies[key] = h;

key 是您的哈希键。如果 hobbies[key] 已经有一个指针,这将导致内存泄漏。

for(auto const& value: hobbies)
{
cout << value->hobby << ":" << endl;
}

这假设 hobbies 散列数组中的每个槽都包含一个指针。这不太可能。如果 hobbies 中的特定 value 从未被初始化(之前插入的 hobbies 都没有映射到该哈希键),指针将是 NULLvalue->hobby 将尝试取消引用 NULL 指针,从而导致未定义的行为。那很可能是你的崩溃。

关于c++ - 尝试从指针数组 c++ 打印时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com