ポインタの配列を作成しようとしています。ポインタの配列から印刷しようとすると奇妙な出力が発生する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 & 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文の最後の行でワンセグ障害を取得していますし、機能がに行くと、なぜ私は混乱しています配列が空でなければならないので、最初の関数実行時にhobbies [key]がnullになるはずのelse文?
配列のポインタを 'nullptr'(' hobbylist * hobbies [HASHMAP_SIZE] {} ')に初期化し、印刷前にチェックします(' if(value){std :: cout << value-> hobby << ":" << std :: endl;} ')。 – Jarod42
さらに、 'std :: unique_ptr'の配列を使って手作業によるメモリ管理を避けてください。 –
Jarod42
'std :: map'(または 'std :: unordered_map')は、趣味が名前でキーインされているので、もっと意味があります。 –