2016-12-02 8 views
1

これはちょっと疑問に思うかもしれませんが、私はこの時点でかなり切望しています。ポインタの配列との混乱

私はポインタの配列を作成しようとしています:

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){ 
//cout << "Adding to hobby: " << hobby1 << " user: " << id << endl; 
vertex *user = findVertex(id); 
int collisions = 0; 
// 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; 
if(hobbies[key] == NULL){ 
h->hobby = hobby1; 
h->list.push_back(user); 
hobbies[key] = h;} 
else if (hobbies[key]!=NULL){ 
    hobbies[key]->list.push_back(user); 
    collisions++;} 
return collisions; 
} 

機能を最初に実行しているとき、私はaddUserToHobby機能で他の文で最後の行でワンセグ障害を取得していますし、私は混乱しています配列が空でなければならないときに関数がelseステートメントに移動する理由は、関数が最初に実行されたときに趣味[key]はnullにする必要がありますか?さらに検査すると、関数は常にelse文を入力するので、配列の値は決してnullになりませんか?

答えて

1

それぞれの場所は、配列がデフォルトでnullに設定されていないため、割り当て前にそこにあったゴミ箱になります。

+0

これのためにこれについて最善の方法はありますか? –

+0

@andrewfay配列が最初に宣言された後は、すべてを歩いて各インデックスをnullに設定することができます。あなたはhobbylist * Hobbylist [HASHMAP_SIZE] = {0} – Erix

+1

を書くことでこれを省略することができます。実際には、私のイニシャライザですべての値をnullに設定することで、ありがとうございました! –