计算矩阵的行列式时内存泄漏
Memory leak when calculating a determinant of a matrix
在编写一些代码来计算一个简单的 3 x 3 矩阵的行列式时,我注意到它开始累积内存泄漏。我已将方法缩减为以下内容(这意味着我不再使用算法来确定任何矩阵的大小,我这样做 "by hand"):
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 双倍(例如 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
分配(在两个维度上)。
分配给 malloc
的内存必须用 free
释放。总是,即使是少量内存。
在编写一些代码来计算一个简单的 3 x 3 矩阵的行列式时,我注意到它开始累积内存泄漏。我已将方法缩减为以下内容(这意味着我不再使用算法来确定任何矩阵的大小,我这样做 "by hand"):
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 双倍(例如 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
分配(在两个维度上)。
分配给 malloc
的内存必须用 free
释放。总是,即使是少量内存。