2016-07-21 1 views
1

私はそれに値を割り当てるための構造体を持っています。しかし、私のプログラマーはそれをクラッシュさせます。うまくいけばあなたは私を助けることができる。structに値を代入する方法は?

あなたは一つの要素によって作成時にあまりにも多くを反復
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; 

} 
+2

最初のループの 'i <= N'は' i dfri

+0

'i <= N'を' i

答えて

1

for (int i = 0; i <= N; i++){ 

は、配列は0ベースであることで、あなたが要素Nにアクセスできないためにです

for (int i = 0; i < N; i++){ 

ことShouleサイズNの配列、N-1のみが返され、要素0も返されます。

また、コードをより明確にするために、単純なCスタイルの配列の代わりにstd :: arrayを使用することもできますし、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; 
} 

このような問題にどのようにアプローチできるかを明確にしたいと思っています。

このようにベクターを作成してループすることで、潜在的なアクセスエラーが回避され、読みやすくなります。詳細については、std :: vector、そのコンストラクタ、および範囲ベースのループを検索してください。

+0

ありがとう;) – Jacqui

関連する問題