【发布时间】:2014-06-29 10:20:21
【问题描述】:
我正在编写一个程序来执行一组数值方法。为此,我需要创建任意大小的矩阵并将它们放在函数之间。显然,如果我在使用创建矩阵后不清理它们,我会出现严重的内存泄漏。
double** MatrixInitialize(int m, int n)//generates a A[m][n] matrix
{
int i = 0, j = 0;
double** B = new double*[m];
for (m = 0; m < n; m++)
{
B[m] = new double[n];
}
for (j = 0;j<m;j++)
for (i = 0; i < n; i++)
{
B[i][j] = 0;
}
return(B);
}
int main()
{
double** MatrixA;
MatrixA=MatrixInitialize(2,2)
//Some manipulation on MatrixA is done here
delete[] MatrixA[0]; delete[] MatrixA[1]; delete[] MatrixA;
return 0;
}
只要调用 delete[] 行,我就会抛出访问冲突消息并且必须中断。是否有其他程序我必须通过删除这些指针?
【问题讨论】:
-
注意:您正在修改
for (m = 0; m < n; m++)中的函数参数 -
除了逻辑错误,这里没有问题。该示例未显示实际问题。
-
@Dieter 这实际上是我的程序正在做的所有事情。我创建了 2 个矩阵,对它们的条目执行循环操作,然后想在循环结束时删除它们。我发现如果我做了 MatrixA=NULL;删除[]矩阵A;然后它会运行,但我不能对指针 MatrixA[0] 和 MatrixA[1] 做同样的事情,内存仍然会泄漏
-
//Some manipulation on MatrixA is done here。 Dieter 指出的明显逻辑错误很糟糕(例如,想想当您尝试 2x3 矩阵时会发生什么),您需要发布代码。 在删除之前 将指针设置为 NULL 是没有意义的,并且在所有情况下,除了原始 NULL 值之外,这都是公然的内存泄漏。贴出真实代码; 全部。 -
pastebin.com/xCah0vmN 好了。事实上,如果我将指针设置为 NULL 然后删除它们,它似乎实际上并没有泄漏任何内存并且运行得很好。请注意 #include
#include #include 是 NAG C 数值方法库的包含项,仅用于 NRMMatrixCalculation 子例程以求解一组线性方程。
标签: c++ memory memory-management memory-leaks