潜在的 null 应从警告

potential null deference warning

提问人:code_fodder 提问时间:11/7/2023 更新时间:11/7/2023 访问量:68

问:

从这里投票最多的答案之一:将整个 ASCII 文件读入 C++ std::string

使用较新的编译器 (gcc),给定以下代码以将文件读取到字符串中:

std::ifstream t("file.txt");
std::string str((std::istreambuf_iterator<char>(t)),
                 std::istreambuf_iterator<char>());

较新的编译器会发出潜在的 null 服从警告 - 请参阅:https://godbolt.org/z/KojKWT4WK

我们正在使用接受第一个/最后一个迭代器的 std::string 构造函数 - 我很高兴它们被设置为正确的值,所以我认为这段代码没有任何问题。

但是编译器对 std 库代码不满意(我猜)——也许这段代码没有正确检查/处理空指针?

所以这里的问题是,“我的”代码是可以接受的还是有潜在的错误?- 或者这是 std 库中可能存在的错误?或者这只是一个虚假的姿态?

C++ GCC

评论

0赞 Pepijn Kramer 11/7/2023
如果文件是空的,你认为会发生什么?AFAIK 将在内部取消引用 nullptrstd::istreambuf_iterator<char>(t)
0赞 Jarod42 11/7/2023
代码会检查这一点(这隐含地表示不使用 )。分析者可能不理解这种关系。begin != endbeginnullptr
0赞 code_fodder 11/7/2023
@PepijnKramer好点 - 我不确定,但在我的实际代码中,我确实有一个预文件存在/空检查,以便可以处理 - 并且仍然发出警告。

答:

1赞 user12002570 11/7/2023 #1

这只是误报吗?

该程序格式良好。这似乎是误报。这是提交的 gcc 错误:

GCC 发出警告潜在的 null 取消引用