[英]Function is causing huge memory leak?
我有以下功能:
void CGlEngineFunctions::GetBezierOpposite( const POINTFLOAT &a,const POINTFLOAT ¢er, POINTFLOAT &b, float blength )
{
POINTFLOAT v;
v.x = a.x - center.x;
v.y = a.y - center.y;
float alength = GetDistance(a,center);
if(blength == 0)
{
blength = alength;
}
float multiplier = blength / alength;
b.x = center.x - multiplier * v.x;
b.y = center.y - multiplier * v.y;
}
我已将问题缩小到至少两行:
b.x = center.x - multiplier * v.x;
b.y = center.y - multiplier * v.y;
每次我反复调用它时,内存都会猛增,直到崩溃。
我这样使用它:
glEngine.functions.GetBezierOpposite(usrpt[0].LeftHandle,
usrpt[0].UserPoint,usrpt[0].RightHandle,0);
我真的不知道这怎么可能引起任何问题。 为了测试,我将其更改为:
void CGlEngineFunctions::GetBezierOpposite( const POINTFLOAT &a,const POINTFLOAT ¢er, POINTFLOAT &b, float blength )
{
POINTFLOAT v;
v.x = a.x - center.x;
v.y = a.y - center.y;
float alength = GetDistance(a,center);
if(blength == 0)
{
blength = alength;
}
float multiplier = blength / alength;
b.x = 5;
b.y = 5;
}
当我这样做时,它绝对没有问题。 我看不出算术如何导致内存使用率猛增。
谢谢
如果alength和blength = 0会不会是原因?
POINTFLOAT:
float x;
float y;
如果GetDistance
调用此方法,则可能有堆栈溢出 。
如果其他线程调用此方法,则可能有堆栈溢出 。
检查POINTFLOAT定义。 恕我直言,应该对其进行修改以提供减法运算。 您无需引用该结构的任何成员。 但是,此注释将是关于C ++的。
您应该删除“ C”语言标记,因为C语言未提供范围解析运算符“ ::”。
如果POINTFLOAT
是某个复杂的class
(您已标记问题C ++)并且在表达式中重载了运算符,那么我们怎么知道?
同样,您也没有告诉我们为什么您认为这些表达是罪魁祸首,无论您的编译器,平台,操作系统...
找到所有这些的最简单方法是valgrind
(对于unixen)或一些类似的工具。 他们会告诉您确切的分配发生在哪里,最终被泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.