【问题标题】:Valgrind Use of unitialized value of size 8Valgrind 使用大小为 8 的未初始化值
【发布时间】:2015-10-28 10:28:04
【问题描述】:

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

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 所有毫无意义的选角是怎么回事?您可以从该函数中删除所有强制转换,这对它会更好。仅在必要时施放,否则可能会隐藏潜在问题。
  • 如果您有其他问题,请将其作为新问题发布。不要完全更改现有问题,这会使现有答案无效。

标签: c memory valgrind


【解决方案1】:

【讨论】:

  • sizeof(string)?你是说strlen(dot)
【解决方案2】:
  1. 您正在使用sizeof where you should use strlen
  2. 您不必要地将 int 强制转换为 int,两次。
  3. 您正在投射malloc 的结果。 Don't
  4. 您忘记为空终止符分配足够的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多