Я пишу программу HashTable, в которой HashTable полон LinkedLists, который считает частоту слов в файле.В окончательной реализации программы пользователю разрешается выбирать размер цепочки связанного списка через аргумент командной строки с любыми другими аргументами командной строки, которые предполагаются как файлы, которые должны быть обработаны.
RightТеперь я получаю проблему с переполнением стека из функции поиска, чтобы определить, есть ли слово в таблице или нет, и я не уверен, как это исправить.Я выполняю программу, в которой говорится, что это возможно из-за переполнения
Прежде чем добавить еще один узел в хеш-таблицу, я вызываю метод, который возвращает 1, если слово найдено, и 0, если оно не найдено.Вот вызов:
inFile = searchFile(table, data);
таблица - это HashTable, а данные - это слово
searchFile, которое вызывает поиск, являющийся частью моего класса List
int searchFile(HashTablePtr table, char *data) {
ListPtr tempList;
HashObjectPtr obj;
int i;
for (i = 0; i < table->size; i++) {
tempList = table->table[i];
if (tempList->size > 0) {
obj = search(table->table[i], data);
if (obj != NULL) {
obj->frequency++;
return 1;
}
}
}
return 0;
}
Функция поиска по списку
HashObjectPtr search(ListPtr list, char *data) {
int num = list->size;
int i;
NodePtr tempNode;
HashObjectPtr tempObj;
tempNode = list->head;
for (i = 0; i < num; i++) {
tempObj = tempNode->HashObject;
while (tempNode != NULL) {
if (strcmp((char *) tempObj->obj, data) == 0) {
return tempObj;
} else {
tempNode = tempNode->next;
}
}
}
return NULL;
}
Я использовал функцию поиска HashObjectPtr ранее в предыдущей реализации этогоПрограмма без проблем, и я не уверен, почему это будет создавать переполнение сейчас.
HashObject
struct hashobject {
int frequency;
void *obj;
char (*toString)(void *obj);
};
HashTable
struct hashtable {
int size;
ListPtr *table;
};
Lise
struct list {
int size;
NodePtr head;
NodePtr tail;
};
Я не совсем уверен, что это переполнение стека, поскольку все, что действительно показывает valgrind,что несколько слов вошли, и тогда я получаю ошибку ошибки сегментации.Я запустил его через отладчик, но он не работает в моей функции поиска после прохождения примерно 12 итераций цикла for.