2016-12-02 99 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语句的最后一行运行函数的第一次,当得到一个赛格故障,我很迷茫为什么当数组应该是空的时候函数会进入else语句,因此函数第一次运行时hobbies [key]应该为空?进一步检查后,该函数将始终输入else语句,因此数组值永远不会为null?

回答

1

每个位置都是默认情况下数组未设置为空,它只是在您分配它之前的任何垃圾。

+0

因为这个,最好的方法是什么? –

+0

@andrewfay首次声明数组后,您可以遍历整个事物并将每个索引设置为null。您可以通过编写hobylist * hobbies [HASHMAP_SIZE] = {0} – Erix

+1

来简化这个过程。实际上,通过在我的初始化程序中将每个值设置为null来结束它。谢谢! –