c++ MFC程序,指针返回问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 08:16:27
下面是我的程序,我想返回指针X,指针V及error的值。结果error的值可以返回,但是X,V却返回不了。这是为什么呢?请高手帮下忙。
void CDoubleDiff::LeastSquare(double *A, double *L, int m, int n, double *X, double *V, double &error)
{
CMatrxi matrix;
double *middle1=matrix.MatrixInv (matrix.MatixMutiply (matrix.MatrixT (A,m,n),A,n,n,m),n);
double *middle2=matrix.MatixMutiply (middle1,matrix.MatrixT (A,m,n),n,m,n);
X=matrix.MatixMutiply (middle2,L,n,1,m);
delete []middle1;
delete []middle2;
double *middle3=matrix.MatixMutiply (A,X,m,1,n);
V=matrix.MatrixMinus (middle3,L,m,1);
delete []middle3;
error=0;
for(int i=0;i<m;i++)
error=error+V[i]*V[i];
error=sqrt(error/(m-n));
}
该函数中的运算,是由CMatrxi类计算的。是一些矩阵运算,返回的也是指针。

//请这样试一试,代码如下:

void CDoubleDiff::LeastSquare(double *A, double *L, int m, int n, double *&X, double *&V, double &error)
{
CMatrxi matrix;
double *middle1=matrix.MatrixInv (matrix.MatixMutiply (matrix.MatrixT (A,m,n),A,n,n,m),n);
double *middle2=matrix.MatixMutiply (middle1,matrix.MatrixT (A,m,n),n,m,n);
X=matrix.MatixMutiply (middle2,L,n,1,m);
delete []middle1;
delete []middle2;
double *middle3=matrix.MatixMutiply (A,X,m,1,n);
V=matrix.MatrixMinus (middle3,L,m,1);
delete []middle3;
error=0;
for(int i=0;i<m;i++)
error=error+V[i]*V[i];
error=sqrt(error/(m-n));
}

你这个V不是个指向数据的指针么?
你在你这个函数的后面将V打印一下,看是不是改变了!

V=matrix.MatrixMinus (middle3,L,m,1);你这个函数返回的数组不会是在
MatrixMinus 里定义临时数组变量吧?要是的话,你退出MatrixMinus 函数后,那个临时变量数组也会被释放掉了,V的指针指向的地址的只是些随机乱码值!

把X和V的实参的定义用static修饰
注意是实参而不是形参X,V