"Access violation reading location 0x00000000" GDAL WKT C++
"Access violation reading location 0x00000000" GDAL WKT C++
我在gis系统上工作,使用数据库存储坐标。我从数据库与QT API读取坐标。我得到坐标从数据库在WKT格式(众所周知的文本)。接下来,我将尝试从WKT构建GDAL类型(OGRGeometry)。Geometry是抽象类,Point继承了Geometry。我试着用函数来表示点。当我调试时,在最后一列有错误。错误是"读取位置0x00000000"
`QString qsWKT = model.data(model.index(0, 0)).toString();
std::string temp(qpszWKT.toStdString());
char* pszWkt = (char*)temp.c_str();
OGRGeometry* new_geom;
OGRErr err = OGRGeometryFactory::createFromWkt(&pszWkt, NULL, &new_geom);
if(new_geom->getGeometryName() == "Point") { qDebug() << "good";}`
根据OGRGeometryFactory::createFromWkt
的文档(通过Google找到),如果方法失败,您的new_geom
"将为NULL "。
现在,如果你得到返回值OGRERR_NONE
,但也NULL
,那么有一些可能性:
- 您检查返回值的代码是错误的(未显示在问题中)。
- 库中有一个bug。
- 有一些未记录的错误情况,你得到
NULL
和OGRERR_NONE
返回值的组合。
无论它是哪一种,您仍然必须检查是否得到了NULL
,并将其解释为未指定的错误。
那么问题就变成了,为什么会出现错误。我建议您添加这些调试打印:
qDebug() << "qsWKT:" << qsWKT;
qDebug() << "hexdump:" << QByteArray(pszWKT).toHex();
然后看看这些,并试着找出你是否有这些:
- 只是普通无效的WKT格式
- 意外空白(使用
QString::trimmed()
甚至QString::simplified()
修复) - 转换为
QString
UTF16之前原始数据中的文本编码不匹配 - 从
QString
转换为std::string
时文本编码不匹配
WKT可能应该是7位ASCII,所以如果十六进制转储显示任何>= 0x80
的值,那么你肯定知道你有编码或数据损坏问题。
相关文章:
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 使用 GDAL 获取矢量数组中的所有行数和列数
- 如何使用 C++ gdal 库将栅格地理从 EGM96 转换为 WGS84 椭球体高度基准面
- 无法使用"generate_vcxproj.bat"生成 GDAL Visual Studio 项目
- 使用CMake而不是g++链接GDAL库
- 如何使用 gcc 5.5 在 gdal 2.4 中启用 c++14
- 使用 GDAL 将 DXF 块从一个文件导入到另一个文件
- Java JNI GDAL 本机库在重新部署为 Web 应用程序时出现类加载器错误
- C++ GDAL 算法 GDALFillNodata() 的实现
- 使用 GDAL/OGR C++将 GeoTiff 的 XY 点重新投影到纬度/经度
- GDAL DestroyFeature() 方法产生分割错误
- 在C++中编译/执行 GDAL 时出现问题
- 无法使用 OGR/GDAL 从形状文件中获取 EPSG
- 无法在 Windows 上将 OSG 与 GDAL 一起使用
- 使用GDAL在FAA部分上找到像素位置
- GeoDjango GDAL installation
- 如何从GDAL位于RAM中的Geotiff创建数据集
- 链接器错误构建GDAL VS2017
- 如何将GDALResampleAlg传递给GDAL的RasterIO?
- "Access violation reading location 0x00000000" GDAL WKT C++