world680 2017-09-08 23:42 采纳率: 0%
浏览 934

C++编程,多次运行这段代码,出现内存泄漏,也没有用堆栈,不知道哪里错了!求各位大神帮助!!

直接复制代码:
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条回答 默认 最新

  • world680 2017-09-09 02:12
    关注

    haha,自己找到了,在这里分享一下吧!!那个在这里面用了克隆,pBpolygon.clone(),这个函数传出的是一个地址,应该是在堆栈中创建了和pBpolygon同样大小的内存空间,把这个地址存起来,在程序末尾把它delete,内存泄漏消失了,问题得到解决。。。。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题