enter preformatted text here
Speller works but valgrind says I'm having memory leaks:
52 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==1454== at 0x4029F6F: malloc (vg_replace_malloc.c:270) ==1454== by 0x804921B: load (dictionary.c:85) ==1454== by 0x8048811: main (speller.c:43) ==1454== ==1454== LEAK SUMMARY: ==1454== definitely lost: 52 bytes in 1 blocks ==1454== indirectly lost: 0 bytes in 0 blocks ==1454== possibly lost: 0 bytes in 0 blocks ==1454== still reachable: 0 bytes in 0 blocks ==1454== suppressed: 0 bytes in 0 blocks ==1454== ==1454== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Here are the relevant snippets:
node* entry=malloc(sizeof(node)); /dictionary line 85, I malloc a node into which fscanf will read new dictionary entry/
if (entry==NULL) return 1; entry->next=NULL; while
return 1;
entry->next=NULL;
while (fscanf(infile, "%s", entry->wordval) != EOF)
{
int bucket=entry->wordval[0]-97;
if(hash[bucket]==NULL)
hash[bucket]=entry;
else
{
struct node* newnode;
newnode=malloc(sizeof(node)); /I suspect this line where I malloc a new node is wrong, but removing it and just using the previous entry node gives rise to more errors, even after freeing entry node/
strcpy(newnode->wordval, entry->wordval);
newnode->next=hash[bucket];
hash[bucket]=newnode;
}
count++;
}
{
int bucket=entry->wordval[0]-97; if(hash[bucket]==NULL)
hash[bucket]=entry;
else
{ struct node* newnode; newnode=malloc(sizeof(node)); /*I suspect this line where I malloc a new node is wrong, but removing it and just using the previous entry node gives rise to more errors, even after freeing entry node*/ strcpy(newnode->wordval, entry->wordval); newnode->next=hash[bucket]; hash[bucket]=newnode; }
count++;
}
bool unload (void) //this part is straight out of the lecture so should work { for (int i=0; i<26; i++) { node* ptr=hash[i]; //hash[i] being the head, with 0<=i<26, representing the alphabet while (ptr->next!=NULL) { node* predptr=ptr; ptr=ptr->next; free(predptr); } free (ptr); }
for (int i=0; i<26; i++)
{ node* ptr=hash[i]; /hash[i] being the head, with 0<=i<26, representing the alphabet/
while (ptr->next!=NULL)
{ node* predptr=ptr; ptr=ptr->next; free(predptr); }
free (ptr); }
Been at this for weeks now, thanksgrateful for any helpsuggestions.