У меня есть массив структур, в которых каждый элемент массива имеет вид:
struct Item {
int code;
char * label;
};
Сам массив является глобальной переменной:
struct Item * ht[SIZE];
Вот как я сейчас вставляю элемент вмассив:
void insert(int toadd, char *toput) {
struct Item *item = (struct Item*) malloc(sizeof(struct Item));
item->label = toput;
item->code = toadd;
int hashIndex = 0;
//move in array until an empty or deleted cell
while(ht[hashIndex] != NULL && ht[hashIndex]->code != -1) {
//go to next cell
++hashIndex;
//wrap around the table
hashIndex %= SIZE;
}
ht[hashIndex] = item;
}
В другой функции я вызываю метод insert, а затем несколько операторов printf, чтобы проверить, что происходит:
insert(ctr, trimwhitespace(line2));
printf("\nAdding to ht: String: %s Integer: %d\n", trimwhitespace(line2), ctr);
for (int i = 0; i < SIZE; i++) {
if (ht[i] != NULL)
printf("\nThis is what's inside ht: String: %s Integer: %d\n", ht[i] -> label, ht[i] -> code);
}
Это пример вывода:
Добавление к ht: строка: четыре целое число: 6
Это то, что находится внутри ht: строка: четыре целое число: 0
это то, что находится внутри ht: строка: четыре целое число: 4
Это то, что внутри ht: строка: четыре целое число: 5
Это то, что внутри ht: строка: четыре целое число: 6
Как вы можете видеть,структура вставляется несколько раз с разными целочисленными значениями.
Я думаю, что это вряд ли проблема с циклами, в которых находится вызов insert
, так как первый оператор печати также будет напечатан несколько раз, если вызов insert
был выполнен несколько раз.Но я могу ошибаться.
Как мне убедиться, что метод insert
вставляет структуру только один раз, а не несколько раз?Или проблема кроется в другом месте?