gpt4 book ai didi

c++ - 函数导致巨大的内存泄漏?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:34:52 24 4
gpt4 key购买 nike

我有以下功能:

void CGlEngineFunctions::GetBezierOpposite( const POINTFLOAT &a,const POINTFLOAT &center, 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 &center, 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 调用此方法,可能会发生 Stack Overflow

如果其他线程调用该方法,可能会出现Stack Overflow

检查 POINTFLOAT 定义。恕我直言,应该修改它以提供减法运算。您不需要引用任何结构的成员。但是这个评论将是关于 C++ 的。

您应该删除“C”语言标记,因为 C 语言不提供范围解析运算符“::”。

关于c++ - 函数导致巨大的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3379673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com