【发布时间】:2010-07-31 20:21:27
【问题描述】:
我有以下功能:
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;
}
我已将问题缩小到至少 2 行:
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;
【问题讨论】:
-
你能为我们定义
POINTFLOAT吗?这是可以猜测的,但最好确定一下。 -
我对您的语言的细节一无所知,但如果
alength和blength为零,float multiplier = blength / alength;将抛出某种除以零异常或产生无穷大。 -
定义一个巨大的内存泄漏。通过函数每次损失多少?
-
假设 POINTFLOAT 只是一个简单的结构(pod),这段代码没有内存泄漏。您正在其他地方泄漏(如果它甚至是真正的泄漏),这可能取决于此函数的结果。寻找执行 malloc/new 或库调用的东西,当你完成资源时,你必须释放它。
标签: c++ c algorithm memory function