我在这里转发了这个问题:
答案 0 :(得分:1)
我看到的第一个问题是func2没有错误检查。无论是valgrind注意到这一点,还是抱怨其他事情,我都不确定。
如果您知道在所有用例中func2 永远将std == NULL
调用,那么您不需要 错误检查。但是valgrind无法知道,即使它是真的。检查如下:
func2(str, line)
{
char * t1 = str, * t2 = str;
if (str == NULL) return;
...
}
有帮助吗?
答案 1 :(得分:0)
我认为问题在于valgrind注意到:
str = realloc(str, ....); //this is within the loop
可以将str
设置为NULL(如果realloc()
失败)。
看看以下内容是否让Valgrind满意:
char* tmp = realloc(str, ...);
if (!tmp) {
abort(); // or some other error handling
}
str = tmp;