У меня проблема с хешированием.
Привет,
Я пытаюсь хэшировать английские слова из txt-файла и хранить их в таблице с помощью метода цепочки. но я не знаю, что не так, когда я пытаюсь искать и сравнивать .
эта ошибка :
"Выброшено исключение: нарушение доступа на чтение.
поиск был 0x1.
Если есть обработчик для этого исключения, программа может быть безопасно продолжена."
спасибо.
Что я уже пробовал:
#include <iostream> #include <string> #include <sstream> #include <fstream> using namespace std; #define a 1 #define b 2 #define p 311 #define size 355063 struct Node { char* word; Node* next; }; int ASCII_sum(char* word) { int sum=0; for (int i = 0;i<strlen(word);i++) {="" sum="" +="word[i];" }="" return="" sum-2;="" int="" h(int="" k)="" (((a*k="" b)="" %="" p)="" size);="" void="" insert(node**="" d,="" index,="" node*="" word)="" if="" (d[index]="=" null)="" d[index]="word;" d[index]-="">next = NULL; } else { word->next = D[index]; D[index] = word; } } Node** Hash(char* file_name) { FILE* dictionary = fopen(file_name, "r"); char w[128]; Node** Dictionary = new Node* [size]; for (int j = 0;j < size;j++) { Dictionary[j] = NULL; } int i = 0; while (i<354986) { fscanf(dictionary, "%s",w); Node* new_word = new Node; //new_word->word = strcpy(new_word->word, w); new_word->word = w; //insertion: int index = H(ASCII_sum(w)); if (Dictionary[index] == NULL) { new_word->next = NULL; Dictionary[index] = new_word; } else { new_word->next = Dictionary[index]; Dictionary[index] = new_word; }//insertion //insert(Dictionary, H(ASCII_sum(w)), new_word); //cout << Dictionary[index]->word<< endl; i++; } return &Dictionary[size]; } /*void print_index(Node** table, int index) { Node* P = table[index]; while (P != NULL) { cout << P->word<<endl; P = P->next; } }*/ bool check_sentence(string s,Node** Dectionary) { bool found = true; istringstream split(s); while (split) { string tmp; split >> tmp; if (tmp == "") continue; char *t = new char[tmp.length()+1]; t = strcpy(t, tmp.c_str()); Node* search = Dectionary[H(ASCII_sum(t))]; cout << H(ASCII_sum(t))<<endl; if (search == NULL) { return false; } while (search != NULL) { if (strcmp(search->word, t)) { cout << search->word; found = true; break; } else { search = search->next; cout << search->word << endl; } } return false; delete [] t; } return found; } void case_insensitive(char* text) { return; } int main() { cout << "Processing...\n"; Node* table = *Hash("words.txt"); cout << "Finished.\n"; string s; cin >> s; if (check_sentence(s,&table)) { cout << "True\n"; } else { cout << "False\n"; } }
Afzaal Ahmad Zeeshan
нарушение доступа к чтению.
Я думаю, что, возможно, это дружественная версия того, что ваша программа обращается к областям памяти, к которым у нее нет доступа.
Кроме того, он также направляет вас, говоря:, поиск был 0x1. У вас есть переменный поиск. Проверьте его еще раз на 0x1; отладьте его здесь.
jeron1
Звучит как хорошее время, чтобы пройти через код с помощью отладчика.