关于
bool Maxtrix_Mul (SparseMatr M1, SparseMatr M2, int* M, int bufferSize, int& Row, int& Col)
{
if(M1.n!=M2.m)
{cerr<<"两矩阵不能相乘"<<endl;return 1;} //验证两矩阵能否相乘
if(M1.t*M2.t==0)
{cerr<<"矩阵相乘为0"<<endl;return 1;} //验证结果是否为0
int ahl=M1.m*M2.n;
if(ahl>bufferSize) //验证结果是否溢出
{cerr<<"缓冲区溢出"<<endl;return 1;}
M=new int[ahl]; //分配内存并使M指向它
for (int size=0;size<ahl;size++)
*(M+size)=0; //数组初始化为0
Row=M1.m;
Col=M2.n;
int pa=1,pb=1,pe;
Triple temp;
for (int o1=1;o1<M1.t;o1++) //将M1矩阵按行大小排序
if(M1.Seq_data[o1].i>M1.Seq_data[o1+1].i)
{temp=M1.Seq_data[o1];M1.Seq_data[o1]=M1.Seq_data[o1+1];M1.Seq_data[o1+1]=temp;}
for (int o=1;o<M2.t;o++) //将M2矩阵按列大小排序
if(M2.Seq_data[o].i>M2.Seq_data[o+1].i)
{temp=M2.Seq_data[o];M2.Seq_data[o]=M2.Seq_data[o+1];M2.Seq_data[o+1]=temp;}
for (int u=1;u<=Row;u++) //按行计算
for (int v=1;v<=Col;v++)
{
pe=0;
while(M1.Seq_data[pa].i<u)
{
pa++;
if(pa>M1.t)break;
}
while(M2.Seq_data[pb].j<v)
{
pb++;
if(pb>M2.t)break;
}
while(M1.Seq_data[pa].i==u&&M2.Seq_data[pb].j==v) //如果M1的列数等于M2的行数,计算其相乘结果
{
if(M1.Seq_data[pa].j==M2.Seq_data[pb].i)
{pe+=M1.Seq_data[pa].v*M2.Seq_data[pb].v;}
pa++;pb++;
}
*(M+(u-1)*Row+v)=pe;
}
return 0;
};
int* hp=NULL;
会产生一个错误:0x004120e4 处未处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突
能不能请高手帮我解答一下为什么??