J'essaye d'implémenter la table de hachage avec la résolution séparée de collision de chaînage et j'ai un problème. Ceci est mon code (peu modifié pour simplifier, mais encore une erreur même):Le programme C++ se termine sans raison? (Table de hachage)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
int ascii(char character)
{
return character;
}
int hashFunction(string word, int num)
{
char* str = new char[word.length() + 1];
strcpy(str, word.c_str());
return ((3 * ascii(str[0]) + 5 * ascii(str[1]))) % num;
}
typedef struct tab
{
string data;
struct tab* next;
}Node;
typedef struct link
{
Node* head;
Node* tail;
}List;
List* createList()
{
List* list = new List();
if (list)
{
list->head = NULL;
list->tail = NULL;
}
return list;
}
void insert(List* list, string data)
{
//if list is empty
if (list->head == NULL) //!!!!!!!!!!!!!!!!ERROR OCCURE HERE !!!!!!!!!!!!!!!
{
list->head = new Node();
list->head->data = data;
list->head->next = NULL;
list->tail = list->head;
}
//if list already contains some data
else
{
list->tail->next = new Node();
list->tail->next->data = data;
list->tail = list->tail->next;
list->tail->next = NULL;
}
}
int main(int argc, char* argv[])
{
int size = 8; //Size of hash table (number of indexes)
List* table[12];
string A[8] = { "hello","world","car","notebook","science","starwars","lollypop","anything" };
//Insert elements from array A into a hash table
int index;
for (int i = 0; i < size; i++)
{
index = hashFunction(A[i], size);
if (table[index] == NULL)
table[index] = createList();
insert(table[index], A[i]);
}
return 0;
}
Quand je lance le fichier .exe (ou commence à partir cmd), programme se termine avec un message que app.exe a cessé de fonctionner . J'ai essayé de déboguer le programme et j'ai obtenu ceci: http://imgur.com/a/yOhRV
Quelqu'un peut-il m'aider à résoudre ce problème? J'ai compris que le problème doit être dans la fonction insert(), probablement dans la condition, mais je ne sais pas ce qui ne va pas.
Bienvenue dans Stack Overflow! Il semble que vous deviez apprendre à utiliser un [débogueur] (https://en.wikipedia.org/wiki/Debugger) pour parcourir votre code. Avec un bon débogueur, vous pouvez exécuter votre programme ligne par ligne et voir où il dévie de ce que vous attendez. C'est un outil essentiel si vous voulez faire de la programmation. Pour en savoir plus: [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –