我在使用Valgrind调试代码时遇到了一些麻烦。这里就是错误出现的结构和主要部件:C - valgrind - 大小为1的无效读取
struct trieNode {
char *word;
struct trieNode *(subNode[LEAF_NUM]);
struct sharpNode *sharp;
};
//linked list of sharp(s)
struct sharpNode {
char *word;
struct sharpNode *next;
};
if (head->word == NULL){
//strlen(head->word) == 0){
head->word = (char *)malloc(MAX_LEN * sizeof(char)); //LINE 191
//memset(head->word, '\0',strlen(head->word));
strncpy (head->word, word, strlen(word));
} else {
if (head->sharp == NULL) {
head->sharp = sharpNodeCreate();
head->sharp->word = (char *)malloc(MAX_LEN * sizeof(char)); //LINE 200
//head->sharp->word[strlen(word)] = '\0';
strncpy (head->sharp->word, word, strlen(word));
}
}
} else if (sharpIndex == 0 && strlen(trie_ptr->word) > 0) {
printf("%s\n", trie_ptr->word); //LINE 135
} else if (notSharp == 0 && sharp_ptr != NULL) {
printf("%s\n", sharp_ptr->word); //LINE 137
} else {
printf("There are no more T9onyms\n");
}
当我跑Valgrind的,它抱怨:
==20040== Invalid read of size 1
==20040== at 0x4A09264: __GI_strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==20040== by 0x334BC6DD2B: puts (in /usr/lib64/libc-2.17.so)
==20040== by 0x400C2C: lookupTrie (trie.c:135)
==20040== by 0x400905: main (t9.c:23)
==20040== Address 0x4c4e2f4 is 0 bytes after a block of size 4 alloc'd
==20040== at 0x4A06409: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==20040== by 0x400D6B: populateTrie (trie.c:191)
==20040== by 0x4008F9: main (t9.c:22)
==20040==
ace
Enter Key Sequence (or "#" for next word):
#
==20040== Invalid read of size 1
==20040== at 0x4A09264: __GI_strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==20040== by 0x334BC6DD2B: puts (in /usr/lib64/libc-2.17.so)
==20040== by 0x400C4A: lookupTrie (trie.c:137)
==20040== by 0x400905: main (t9.c:23)
==20040== Address 0x4dad294 is 0 bytes after a block of size 4 alloc'd
==20040== at 0x4A06409: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==20040== by 0x400DDA: populateTrie (trie.c:200)
==20040== by 0x4008F9: main (t9.c:22)
能有人指出我在右边irection?
'head-> sharp = sharpNodeCreate();','sharpNodeCreate()'做了什么? – brokenfoot
在'strncpy(head-> word,word,strlen(word));','word'(第二个参数)是什么? – brokenfoot