计算矩阵的行列式时内存泄漏

时间:2015-07-08 21:43:07

标签: c++ matrix memory-leaks

在编写一些代码来计算简单的3 x 3矩阵的行列式时,我注意到它开始累积内存泄漏。我已经将方法简化为以下(意味着我不再使用算法来确定任何矩阵的大小,我这样做"手工"):

double Determinant(double** &m)
{
    return m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) -
           m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) +
           m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
}

我无法解决这个问题,因为我没有在方法中分配任何内存。如果我改变它并简单地返回一个双(return 1.0,例如)泄漏消失了。这里发生了什么?

编辑(更多代码):

double LogMultivariateNormalDensity(unsigned char* &x, unsigned char* &mean, double** &sigma)
{
    double det = Determinant(sigma);
    ...
}

反过来在循环中调用

for(unsigned int i = 0; i < n; i++)
{
    LogMultivariateNormalDensity(_x[i], _mean[i], _sigma[i])
}

作为二维数组,使用_sigma(在两个维度中)分配malloc

1 个答案:

答案 0 :(得分:2)

分配了malloc的内存必须使用free释放。总是,即使是少量的记忆。