Skip to main content
formatting
Source Link
ronga
  • 1.4k
  • 1
  • 8
  • 15

enter preformatted text hereSpeller 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.

enter preformatted text hereSpeller 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.

enter preformatted text hereSpeller 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, grateful for any suggestions.

added 30 characters in body
Source Link
ronga
  • 1.4k
  • 1
  • 8
  • 15

Spellerenter preformatted text hereSpeller 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.

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.

enter preformatted text hereSpeller 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.

Source Link
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.