Hi~ Could you please tell me the reason I can’t pass CS50 check? It seems there is no error when I run valgrind ./speller texts/lalaland.txt
(I count the nodecount q’ty during LOAD and confirmed the nodecount q’ty is 0 after UNLOAD.)
The result of valgrind and check50 are as following:
==21620==
==21620== HEAP SUMMARY:
==21620== in use at exit: 0 bytes in 0 blocks
==21620== total heap usage: 367,084 allocs, 367,084 frees, 82,227,504 bytes allocated
==21620==
==21620== All heap blocks were freed -- no leaks are possible
==21620==
==21620== For counts of detected and suppressed errors, rerun with: -v
==21620== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Helping with...
==21620== All heap blocks were freed -- no leaks are possible
...
==21620== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Looks like your program doesn't have any memory-related errors! Be sure, though, to test it with other inputs!
~/workspace/pset5/speller/ $ check50 cs50/2018/x/speller
Connecting.....
Authenticating.......
Preparing................
Uploading.............
Checking........
:) dictionary.c, dictionary.h, and Makefile exist
:) speller compiles
:) handles most basic words properly
:) handles min length (1-char) words
:) handles max length (45-char) words
:) handles words with apostrophes properly
:) spell-checking is case-insensitive
:) handles substrings properly
:( program is free of memory errors
valgrind tests failed; rerun check50 with --log added to end of command for more information.
See https://cs50.me/checks/6c42ab975ef6473130e4f48c1e5e74a5910dffd7 for more detail.
:( program is free of memory errors
valgrind tests failed; rerun check50 with --log added to end of command for more information.
Log
running valgrind ./speller substring/dict substring/text...
checking for output "MISSPELLED WORDS ca cats caterpill caterpillars WORDS MISSPELLED: 4 WORDS IN DICTIONARY: 2 WORDS IN TEXT: 6 "...
checking that program exited with status 0...
checking for valgrind errors...
Conditional jump or move depends on uninitialised value(s): (file: dictionary.c, line: 33)
Use of uninitialised value of size 8: (file: dictionary.c, line: 33)
Conditional jump or move depends on uninitialised value(s): (file: dictionary.c, line: 60)
bool check(const char *word)
{
// TODO
int j=0; // for children[j]
int k; // for strlen(word)
node *travs=root;
for (k=0;k <= strlen(word) +1;k++)
{
if(isalpha(word[k]) || word[k]=='\'') this is line:33
{
j=tolower(word[k])-'a';
if(j==-58)
{
j=26;
}
if (travs->children[j]==NULL)
{
k=0;
travs=root;
return false;
}
else if (travs->children[j]!=NULL)
{
travs=travs->children[j];
}
} //end of if(isalpha(letter) || letter=='\'' )
if(word[k]=='\0') -- this is line: 60
{
if (travs->is_word==1)
{
return true;
k=0;
}
}