如何为struct赋值?

时间:2016-07-21 10:50:37

标签: c++

我有一个为其赋值的结构。但我的程序崩溃了。希望你能帮助我。

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;

}

1 个答案:

答案 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,其构造函数和基于范围的循环。