我最近用valgrind进行了全面的泄漏检查,发现了这个错误,并且"条件跳转或移动取决于未初始化的值"它一直在扔。我在这做错了什么?它一直指向这个功能:
int tldlist_add(TLDList *tld, char *hostname, Date *d) {
if (date_compare(tld->begin, d) > 0 || date_compare(tld->end, d) < 0)
return 0;
char *dot = strrchr(hostname, '.') + 1;
int i = 0;
while (i < sizeof(dot))
{
dot[i] = tolower(dot[i]);
i++;
}
char *temptld = (char *)malloc(sizeof(dot));
strcpy(temptld, dot);
tld->root = addnode(tld, temptld, tld->root);
tld->count++;
return 1;
}
具体在此行:dot[i] = tolower(dot[i]);
非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
sizeof(dot)
给出指针的大小而不是指针dot
指向的sizeof字符串,而dot[i]
将导致超出范围的内存访问。
答案 1 :(得分:0)
sizeof
where you should use strlen
。int
投射到int
两次。malloc
的结果。 Don't。