首页 > 解决方案 > Valgrind 根据未初始化的值报告条件跳转或移动,但我不明白为什么

问题描述

const char path[] = "./folderidonthave";
struct stat stat_path;
stat(path, &stat_path);

if ( S_ISDIR(stat_path.st_mode) ) {
  return 1;
}
return 0; 

我仍然不明白为什么 Valgrind 有这个问题,因为条件变量似乎被初始化了。

标签: cunixvalgrind

解决方案


鉴于您要尝试的路径的名称stat,这似乎很明显:stat()失败,并且struct stat stat_path您声明的 仍然未初始化,因此您if将在未初始化的数据上分支。

检查错误的返回值stat()

int res;

res = stat(path, &stat_path);
if (res != 0) {
    // Handle the error somehow.
    perror("stat failed");
    return 0; // Return something appropriate here.
}

if (S_ISDIR(stat_path.st_mode))
    return 1;

return 0;

或者,更简洁(假设您想将错误视为与“不是目录”相同):

return !stat(path, &stat_path) && S_ISDIR(stat_path.st_mode);

推荐阅读