Valgrind使用大小为8的单位化值

时间:2015-10-28 10:28:04

标签: c memory valgrind

我最近用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]);

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

sizeof(dot)给出指针的大小而不是指针dot指向的sizeof字符串,而dot[i]将导致超出范围的内存访问。

答案 1 :(得分:0)

  1. 您正在使用sizeof where you should use strlen
  2. 您不必要地将int投射到int两次。
  3. 您正在投射malloc的结果。 Don't
  4. 您忘记为null终止符分配足够的内存。