繁体   English   中英

功能是否导致巨大的内存泄漏?

[英]Function is causing huge memory leak?

我有以下功能:

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调用此方法,则可能有堆栈溢出

如果其他线程调用此方法,则可能有堆栈溢出

检查POINTFLOAT定义。 恕我直言,应该对其进行修改以提供减法运算。 您无需引用该结构的任何成员。 但是,此注释将是关于C ++的。

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

如果POINTFLOAT是某个复杂的class (您已标记问题C ++)并且在表达式中重载了运算符,那么我们怎么知道?

同样,您也没有告诉我们为什么您认为这些表达是罪魁祸首,无论您的编译器,平台,操作系统...

找到所有这些的最简单方法是valgrind (对于unixen)或一些类似的工具。 他们会告诉您确切的分配发生在哪里,最终被泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM