gdal中类的内存管理
2017-08-20 本文已影响0人
loloxiaoz
今天遇到一个很奇怪的问题,关于GDAL库的使用。
在一个dll中调用GDAL中的OGRSpatialReference类,在这个dll中的使用sizeof求OGRSpatialReference的大小,与在dll外,使用sizeof求得OGRSpatialReference的大小竟然不一样,一个是40,一个是48。导致在dll外动态分配的OGRSpatialReference内存,在dll内删除会出错。
于是有了以下几种猜测。
1、gdal的版本问题,可能不是要VS2008编译的gdal库,但检查了gdal的库的版本,是没有问题。
2、工程配置问题,对比了dll与调用该dll的主程序配置,没有发现异常的地方。
3、内存对齐,但使用的是同一个OGRSpatialReference类,怀疑是变量的先后声明导致的问题,说不通。
最后的解决方案是,在dll内重新编写个接口类,在这个类中分配内存,然后在这个dll内删除内存。问题解决。但在dll内与外求得的OGRSpatialReference大小不一样的原因还是不清楚,希望有人能解释