PLease Someone help me I was trying to implement a hash table that stores the word of English language for pset 5. So to be in brief, I used an array of linked list ( Chaining ) , I haven't made the entire program but just implemented so that It takes a single word input and searches it through the hash table but it starts giving me Segmentation fault. Please help me on this one.... Thank you in advance !
strcpy(new->s,val);
This is the line where I got stuck with the Segmentation Fault.
My entire code :
#include <cs50.h>
#include <stdio.h>
#include <string.h>
typedef struct node
{
string s;
struct node *next;
}node;
node* create(char*);
unsigned long sdbm(unsigned char*);
bool search(string s,node *first)
{
node *ptr=first;
bool found=false;
while(ptr->next!=NULL)
{
if(strcmp(ptr->s,s)==0)
{
found=true;
break;
}
}
if(found==true)
return true;
else
return false;
}
int main(void)
{
node a[26];
printf("Enter the string\n");
string s=get_string();
unsigned long hashcode = sdbm((unsigned char*)s);
printf("The hashcode is %lu\n", hashcode);
a[hashcode].next=create(s);
printf("Enter the string to be searched among the ones you recently typed
in\n");
string t=get_string();
if(search(t,&a[sdbm((unsigned char*)t)]) == true)
printf("found\n");
else
printf("not found\n");
}
node* create(string val)
{
node* new = malloc(sizeof(node));
if(new!=NULL)
{
new->s="";
strcpy(new->s,val); // this is the part ehere I get Segmentation Fault
new->next=NULL;
}
return new;
}
unsigned long
sdbm(unsigned char *str)
{
unsigned long hash = 0;
int c;
while ((c = *str++)!=0)
hash = c + (hash << 6) + (hash << 16) - hash;
return hash%26;
}