c - 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 有这个问题,因为条件变量似乎被初始化了。
解决方案
鉴于您要尝试的路径的名称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);
推荐阅读
- sql-server - 为什么使用 .xlsx (Microsoft Excel 2016/2013/2010) 文件进行数据导入,而不是将 .xlsx 保存为 .xls(Microsoft Excel 97-2003)?
- lotusscript - LotusScript:嵌套 if 语句?
- jenkins - 如何将每个 Jenkins 构建链接到它自己的 SonarQube 分析版本?
- c# - Nuget.exe 和 NuGet 包管理器解决不同的依赖关系
- python - TensorFlow - 返回多维张量的不同子张量
- python - 在所有 ListBox TKinter 中打印值和键
- swift - 无法将字符串转换为日期对象
- swift - 字典中的元素总数
- scrapy - 如何使用 requests 或 scrapy 从 opensubtitle.org 下载 zip 文件
- unreal-engine4 - 如何实现输入移动?