Skip to main content
1 of 3
ronga
  • 1.4k
  • 1
  • 8
  • 15

pset 6 memory leaks

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 (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++; }

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); }

Been at this for weeks now, thanks for any help.

ronga
  • 1.4k
  • 1
  • 8
  • 15