分治法—矩阵相乘-看看为什么错误?
程序代码:
struct TSMartrix DAC_MultSMatrix(struct TSMartrix M,struct TSMartrix N) { struct TSMartrix Q; int n=M.mu; Q.nu=Q.mu=M.mu; if(n==2) { int m1,m2,m3,m4,m5,m6,m7; m1=(M.data[0][0]+M.data[1][1])*(N.data[0][0]+N.data[1][1]); m2=(M.data[1][0]+M.data[1][1])*N.data[0][0]; m3=M.data[0][0]*(N.data[0][1]-N.data[1][1]); m4=M.data[1][1]*(N.data[1][0]-N.data[0][0]); m5=(M.data[0][0]+M.data[0][1])*N.data[1][1]; m6=(M.data[1][0]-M.data[0][0])*(N.data[0][0]+N.data[0][1]); m7=(M.data[0][1]-M.data[1][1])*(N.data[1][0]+N.data[1][1]); Q.data[0][0]=m1+m4-m5+m7; Q.data[0][1]=m3+m5; Q.data[1][0]=m2+m4; Q.data[1][1]=m1+m3-m2+m6; return Q; } else { n=n/2; struct TSMartrix M00,M01,M10,M11; struct TSMartrix N00,N01,N10,N11; struct TSMartrix Q00,Q01,Q10,Q11; struct TSMartrix s1,s2,s3,s4,s5,s6,s7; struct TSMartrix MM,NN; M00.mu=M01.mu=M10.mu=M11.mu=M00.nu=M01.nu=M10.nu=M11.nu=N00.mu=N01.mu=N10.mu=N11.mu=N00.nu=N01.nu=N10.nu=N11.nu=n; divide(M,M00,M01,M10,M11);/*分割矩阵M*/ divide(N,N00,N01,N10,N11);/*分割矩阵N*/ MM=AddSMatrix(M00,M11); NN=AddSMatrix(N00,N11); s1=DAC_MultSMatrix(MM,NN);/*运行到这就有错,为什么.......*/ MM=AddSMatrix(M10,M11); s2=DAC_MultSMatrix(MM,N00); NN=SubSMatrix(N01,N11); s3=DAC_MultSMatrix(M00,NN); NN=SubSMatrix(N10,N00); s4=DAC_MultSMatrix(M11,NN); MM=AddSMatrix(M00,M01); s5=DAC_MultSMatrix(MM,N11); MM=SubSMatrix(M10,M00);NN=AddSMatrix(N00,N01); s6=DAC_MultSMatrix(MM,NN); MM=SubSMatrix(M01,M11);NN=AddSMatrix(N10,N11); s7=DAC_MultSMatrix(MM,NN); Q00=AddSMatrix(s1,AddSMatrix(s4,SubSMatrix(s7,s5))); Q01=AddSMatrix(s3,s5); Q10=AddSMatrix(s2,s4); Q11=AddSMatrix(s1,AddSMatrix(s3,SubSMatrix(s6,s2))); merge(Q00,Q01,Q10,Q11,Q); return Q; }编译通过,就是调试运行到那就会说“调用访问内存违例(断异常)”
[ 本帖最后由 wangshui125 于 2012-5-12 18:38 编辑 ]