2016-07-21 9 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++){ 

Shoule быть

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, его конструкторы и циклы, основанные на диапазонах.

+0

Большое спасибо;) – Jacqui

Смежные вопросы