我有一个为其赋值的结构。但我的程序崩溃了。希望你能帮助我。
struct HashEntry{
std::string key; //the key of the entry
bool used; //the value of the entry
int value; //marks if the entry was used before
};
HashEntry *initHashList(int N){
HashEntry* hashList = new HashEntry[N];
for (int i = 0; i <= N; i++){
hashList[i].key = " ";
hashList[i].value = -1;
hashList[i].used = false;
}
for(int i = 0; i <N; i++){
cout<<hashList[i].value<<endl;
}
return hashList;
}
答案 0 :(得分:1)
在创建时迭代一个元素太多:
for (int i = 0; i <= N; i++){
Shoule be
for (int i = 0; i < N; i++){
这是因为当数组基于0时,你不能访问大小为N的数组的元素N,只能访问N-1,但也要返回元素0。
此外,为了使代码更清晰且更不容易出错,您可以使用std :: array而不是纯C样式数组,甚至可以使用std :: vector来循环遍历它们。您也可以使用新的,在大多数情况下应该避免使用。如果您真的不需要,我会将功能更改为
std::vector<HashEntry> initHashList(int N) {
std::vector<HashEntry> hashList(N, { "", false, -1, }); //Creating vector of N elements
for (const HashEntry& entry : hashList) { //Iterating through the elements
std::cout << entry.value << std::endl;
}
return hashList;
}
我希望这能让你更清楚如何解决这个问题。
这种创建向量并循环遍历它的方法避免了潜在的访问错误,并且更容易阅读,imo。有关更多信息,请搜索std :: vector,其构造函数和基于范围的循环。