gpt4 book ai didi

使用 if 条件检查时,条件跳转或移动取决于未初始化的值

转载 作者:行者123 更新时间:2023-11-30 19:29:05 24 4
gpt4 key购买 nike

int t_parse(char* target, FILE* fp) 
{
char cuts = ':';
char * tok;
char ln[BUFF_SIZE];

if (lnCnt == 0)
{
lnCnt = 1;
}

while (!feof(fp))
{
int i = 0;
int hop = 1;
char c;
while (hop)
{
c = fgetc(fp);
if (feof(fp))
{
if (i == 0)
{
return 0;
}
ln[i] = '\0';
hop = 0;
}
else if (c == '\n')
{
ln[i] = '\0';
hop = 0;
}
else if (i == BUFF_SIZE)
{
fprintf(stderr, "%i: Error of long line\n", lnCnt);
exit(1);
}
if (hop)
{
ln[i] = c;
}
i++;
}

if (ln[0] != '#' && ln[0] != '\t' && ln[0] != '\0')
{
tok = strtok(ln, &cuts);
if (tok == NULL)
{
fprintf(stderr, "%d: Error of invalid target\n", lnCnt);
exit(1);
}
else
{
strcpy(target, tok);

for (int j = 0; j < BUFF_SIZE; j++)
{
if (target[j] == ' ')
{
target[j] = '\0';
return lnCnt++;
}
}
return lnCnt++;
}
}
lnCnt++;
}
return 0;
}

运行 Valgrind 后条件跳转或移动取决于未初始化的值 ==2469==在0x10938F:t_parse(text_parsing.c:81)

这是 别的 { strcpy(目标,tok);

            for (int j = 0; j < BUFF_SIZE; j++) 
{
if (target[j] == ' ')
{
target[j] = '\0';
return lnCnt++;
}

第 81 行是 if (target[j] == ' ')我在这里检查,所以我不确定为什么会出现内存泄漏?我运行命令 valgrind --leak-check=yes --track-origins=yes --read-var-info=yes 537make

最佳答案

tok 是复制到target 中的字符串。它将以“\0”字符终止。

然后您将循环遍历 target 中的字符,并将在匹配的空格字符处终止。然而,在没有找到空格字符的情况下,您将超出 target 中的字符串末尾,该空格字符未初始化并且可能包含任何内容 - 因此 valgrind 会警告您这一点。

另一个问题:char *strtok(c​​har *str, const char *delim); 在此,delim 指向一串分隔符,而不是单个字符。所以 char cuts = ':'; 应该是 char *cuts = ":";

关于使用 if 条件检查时,条件跳转或移动取决于未初始化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53272088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com