【发布时间】:2019-07-20 23:40:42
【问题描述】:
在使用directory_iterator 存储一个文件的c_str() 名称之前遍历目录中的所有文件时,会导致无效读取(和垃圾输出)。
这对我来说似乎很奇怪。
代码示例:
工作:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
for (auto const &entry : fs::directory_iterator("./")) {
std::cout << entry.path().filename().c_str() << '\n';
}
}
valgrind 没有报告错误。
损坏的输出:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
for (auto const &entry : fs::directory_iterator("./")) {
auto filename = entry.path().filename().c_str();
std::cout << filename << '\n';
}
}
valgrind 报告 159 次无效读取(大小为 1)——确切数字取决于目录中有多少文件。
这两个 sn-ps 都是使用 gcc 9.1 编译的,使用以下命令:
g++-9.1 test.cpp -std=c++17
【问题讨论】:
标签: filesystems c++17 gcc9