GNpoints<<QPointF(jindu,weidu);写入和 if(GNpoints.size()>2) { for(int i = 0; i < GNpoints.size() - 1; i++) { QPointF point0(GNpoints[i].x(),GNpoints[i].y()); QPointF point0c(GNpoints[i+1].x(),GNpoints[i+1].y());读出,对这个全局变量QVector<QPointF> GNpoints;进行越界等安全判断
时间: 2023-11-27 17:51:17 浏览: 56
以下是对这段代码的安全检查的建议:
写入时可以添加如下判断:
```cpp
if (jindu < std::numeric_limits<double>::lowest() || jindu > std::numeric_limits<double>::max() ||
weidu < std::numeric_limits<double>::lowest() || weidu > std::numeric_limits<double>::max()) {
// 如果经度或纬度超出了double类型的范围,可以选择不写入或抛出异常等处理方式
// 这里假设不能处理,抛出异常
throw std::runtime_error("经度或纬度超出double类型的范围");
}
GNpoints << QPointF(jindu, weidu);
```
读出时可以添加如下判断:
```cpp
if (GNpoints.size() > 2) {
for (int i = 0; i < GNpoints.size() - 1; i++) {
QPointF point0(GNpoints[i].x(), GNpoints[i].y());
QPointF point0c(GNpoints[i + 1].x(), GNpoints[i + 1].y());
if (point0.x() < std::numeric_limits<double>::lowest() || point0.x() > std::numeric_limits<double>::max() ||
point0.y() < std::numeric_limits<double>::lowest() || point0.y() > std::numeric_limits<double>::max() ||
point0c.x() < std::numeric_limits<double>::lowest() || point0c.x() > std::numeric_limits<double>::max() ||
point0c.y() < std::numeric_limits<double>::lowest() || point0c.y() > std::numeric_limits<double>::max()) {
// 如果读出的经度或纬度超出了double类型的范围,可以选择忽略该点或抛出异常等处理方式
// 这里假设忽略该点
continue;
}
// 处理读出的点
// ...
}
}
```
注意,这里只是对经度和纬度的安全检查,如果还有其他需要检查的条件,也需要进行相应的处理。
阅读全文