访问冲突是什么东东啊?
眼看我的类要完成了啊,但是在编译到一个return语句后就报错了
matri.exe 中的 0x00461818 处最可能的异常: 0xC0000005: 读取位置 0xfdfdfdf1 时发生访问冲突
我的拷贝够着函数没问题哦,而且return语句之前的语句执行的结果是正确的,在正确的那几个函数中也用到了return语句返回对象,都没问题,为什么在这里就出问题了呢?
matrix matrix::inverse()
{
if(line!=column) //判断逆矩阵是否存在
{
cout<<"error,line and column differ so no inversion exists!";
exit(1);
}
matrix tem(line,2*column); //构造分块矩阵
for(int i=0;i<line;i++)
for(int j=0;j<2*column;j++)
{ if(j<column)
tem.matrip[i][j]=matrip[i][j];
else
{
if(j-i==column)
tem.matrip[i][j]=1.0;
else
tem.matrip[i][j]=0.0;
}
}
for(int i=0;i<tem.line;i++) //初等变换求矩阵的逆
{
if(tem.matrip[i][i]==0.0) //确保第i行第i列元素不为0
{
int j=i+1;
while(tem.matrip[j][i]==0.0&&j<tem.line) j++;
if(j>=tem.line-1)
{
cout<<"error,no inversion exists!";
exit(1);
}
tem.exchangeij(i,j);
}
if(tem.matrip[i][i]!=1.0)
tem.mi(1.0/tem.matrip[i][i],i); //把第i行i列的元素变成1
long double m=0.0;
for(int j=i+1;j<tem.line;j++)
{
if(tem.matrip[j][i]==0.0)continue;
m=-tem.matrip[j][i];
tem.miToj(m,i,j);
}
tem.outputm();
}
for(int i=tem.line-1;i>0;i--)
{
for(int j=i-1;j>=0;j--)
{
if(tem.matrip[j][i]==0)continue;
long double m=-tem.matrip[j][i];
tem.miToj(m,i,j);
tem.outputm();
}
}
matrix result(line,column);
for(int i=0;i<line;i++)
for(int j=0;j<column;j++)
result.matrip[i][j]=tem.matrip[i][column+j];
return result; //就是在这里就报错了啊,其实计算结果都出来了的哦,为什么会这样呢?
}
matrix::matrix(const matrix& m):line(m.line),column(m.column) //拷贝构造函数
{
matrip=new long double*[line];
for(int i=0;i<line;i++)
{
matrip[i]=new long double[column];
for(int j=0;j<column;j++)
matrip[i][j]=m.matrip[i][j];
}
}
在return语句之前执行的结果和预期完全相符 哈,但是一执行return语句就报错了啊,有什么问题可以加我QQ
{
if(line!=column) //判断逆矩阵是否存在
{
cout<<"error,line and column differ so no inversion exists!";
exit(1);
}
matrix tem(line,2*column); //构造分块矩阵
for(int i=0;i<line;i++)
for(int j=0;j<2*column;j++)
{ if(j<column)
tem.matrip[i][j]=matrip[i][j];
else
{
if(j-i==column)
tem.matrip[i][j]=1.0;
else
tem.matrip[i][j]=0.0;
}
}
for(int i=0;i<tem.line;i++) //初等变换求矩阵的逆
{
if(tem.matrip[i][i]==0.0) //确保第i行第i列元素不为0
{
int j=i+1;
while(tem.matrip[j][i]==0.0&&j<tem.line) j++;
if(j>=tem.line-1)
{
cout<<"error,no inversion exists!";
exit(1);
}
tem.exchangeij(i,j);
}
if(tem.matrip[i][i]!=1.0)
tem.mi(1.0/tem.matrip[i][i],i); //把第i行i列的元素变成1
long double m=0.0;
for(int j=i+1;j<tem.line;j++)
{
if(tem.matrip[j][i]==0.0)continue;
m=-tem.matrip[j][i];
tem.miToj(m,i,j);
}
tem.outputm();
}
for(int i=tem.line-1;i>0;i--)
{
for(int j=i-1;j>=0;j--)
{
if(tem.matrip[j][i]==0)continue;
long double m=-tem.matrip[j][i];
tem.miToj(m,i,j);
tem.outputm();
}
}
matrix result(line,column);
for(int i=0;i<line;i++)
for(int j=0;j<column;j++)
result.matrip[i][j]=tem.matrip[i][column+j];
return result; //就是在这里就报错了啊,其实计算结果都出来了的哦,为什么会这样呢?
}
matrix::matrix(const matrix& m):line(m.line),column(m.column) //拷贝构造函数
{
matrip=new long double*[line];
for(int i=0;i<line;i++)
{
matrip[i]=new long double[column];
for(int j=0;j<column;j++)
matrip[i][j]=m.matrip[i][j];
}
}
[此贴子已经被作者于2007-11-5 14:47:54编辑过]