world680
2017-09-08 23:42C++编程,多次运行这段代码,出现内存泄漏,也没有用堆栈,不知道哪里错了!求各位大神帮助!!
直接复制代码:
polygon Sub(polygon A,polygon B)
{
if (!Isintersects(A,B))//如果不相交直接返回A
{
return A;
}
OGRLinearRing pARing; //A
for (long i=0;i<(long)A.pts.size();i++)
{
pARing.addPoint(A.pts[i].x,A.pts[i].y);
}
OGRPolygon pApolygon;
pApolygon.addRing(&pARing);
OGRLinearRing pBRing; //B
for (long i=0;i<(long)B.pts.size();i++)
{
pBRing.addPoint(B.pts[i].x,B.pts[i].y);
}
OGRPolygon pBpolygon;
pBpolygon.addRing(&pBRing);
OGRGeometry pSumres = pApolygon.Difference(pBpolygon.clone());
bool ppp = pApolygon.Within(pBpolygon.clone());
bool pppp = pApolygon.Contains(pBpolygon.clone());
OGRPolygon pPoly = (OGRPolygon*)pSumres;
double p = pPoly->get_Area();
if (ppp || p == 0)
{
polygon midpoy;
return midpoy;
}
else
{
OGRLinearRing *pring = pPoly->getExteriorRing();
polygon midpoy;
midpoy.pts.resize((long)pring->getNumPoints());
for (long i=0;igetNumPoints();i++)
{
midpoy.pts[i].x = pring->getX(i);
midpoy.pts[i].y = pring->getY(i);
}
return midpoy;
}
}
这个代码想要实现的功能是多边形求差的功能,利用了GDAL库函数,就是把自己的形式数据改写了之后利用GDAL库函数处理,之后再转换成我的数据存储形式进行传出。
这段代码,在运行多次以后,在任务管理器中就会看到这个程序的内存在增大,可是我在这个程序里面也没有在堆栈上开辟空间啊,之前用的指针开辟堆栈空间,后来在释放空间时老是会出现异常,所以就全都改成这样。我前面说的多次运行,是采用了循环,代码:
for (long i=0;i<100000;i++)
{
polygon ply2 = Sub(A,B);
}
对这个GDAL库真心用的心累,求各位神帮助!!!累到爆炸
- 点赞
- 回答
- 收藏
- 复制链接分享
1条回答
为你推荐
- 这段代码在Dev-C++和Visual Studio 2019中的运行结果不一样,这是怎么回事呢?
- c语言
- 1个回答
- Devc++编译运行没有错误,但是不显示结果,而且McAfee出现已阻拦一个病毒。
- c语言
- c++
- 3个回答
- 小白刚学c++,一道计算字符串逆序数的题求大神指教。急!急!急!
- c++
- 1个回答
- QT编程时用代码编程添加了一个textEdit运行时报错说没有这个成员怎么办,求大佬解答
- 小程序
- c++
- 2个回答
- 求大神修改c++代码。统计一篇英文文章中所有单词出现次数。
- 代码
- 修改
- c++
- 6个回答