我编写了一下一段n阶方阵运算的代码:
#include "stdafx.h"
#include <malloc.h>
int main ()
{
int r1;
int i, j;
printf("请输入需要计算的矩阵的行数和列数:"); //行数=列数
scanf("%d,",&r1);
int **MatA, **MatB, **MatC, **MatAt, **MatBt; //分配数组的初始地址
MatA = (int **)malloc(r1); //动态分配数组的大小
for(i=0;i<r1;i++)
MatA[i] = (int *)malloc(r1);
MatB = (int **)malloc(r1);
for(i=0;i<r1;i++)
MatB[i] = (int *)malloc(r1);
MatC = (int **)malloc(r1);
for(i=0;i<r1;i++)
MatC[i] = (int *)malloc(r1);
MatAt = (int **)malloc(r1);
for(i=0;i<r1;i++)
MatAt[i] = (int *)malloc(r1);
MatBt = (int **)malloc(r1);
for(i=0;i<r1;i++)
MatBt[i] = (int *)malloc(r1);
char cOpe, Again; //cOpe是运算符,Again表示是否继续运算
printf("请按照提示输入矩阵中的元素。\n");
for(i=0;i<r1;i++) //输入矩阵A的元素
{
for(j=0;j<r1;j++)
{
printf("MatA[%d][%d]= ",i,j);
scanf("%d",&MatA[i][j]);
}
printf("\n");
}
for(i=0;i<r1;i++) //输入矩阵B的元素
{
for(j=0;j<r1;j++)
{
printf("MatB[%d][%d]= ",i,j);
scanf("%d",&MatB[i][j]);
}
printf("\n");
}
printf("MatA:\n"); //输出矩阵A和矩阵B
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
printf("%5d ",MatA[i][j]);
}
printf("\n");
}
printf("MatB:\n");
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
printf("%5d ",MatB[i][j]);
}
printf("\n");
}
loop: getchar();
printf("请输入运算符号(注:可输入+,-,*,T,\"T\"为转置)。\n");
cOpe = getchar();
printf("你选择了 %c 。\n",cOpe);
switch (cOpe) //运算形式
{
case '+':
{
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
MatC[i][j] = MatA[i][j] + MatB[i][j];
}
}
printf("运算结果为:\n");
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
printf("%5d ",MatC[i][j]);
}
printf("\n");
}
break;
}
case '-':
{
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
MatC[i][j] = MatA[i][j] - MatB[i][j];
}
}
printf("运算结果为:\n");
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
printf("%5d ",MatC[i][j]);
}
printf("\n");
}
break;
}
case '*':
{
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
int m; //m为循环体中的一个变量
MatC[i][j] = 0; //设定矩阵C进行循环的元素的初始值为0
for (m=0;m<r1;m++)
{
MatC[i][j] = MatA[i][m] * MatB[m][j] +MatC[i][j];
}
}
}
printf("运算结果为:\n");
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
printf("%5d ",MatC[i][j]);
}
printf("\n");
}break;
}
case 'T':
{
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
MatAt[i][j] = MatA[j][i];
MatBt[i][j] = MatB[j][i];
}
}
printf("转置后的矩阵A为:\n");
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
printf("%5d ",MatAt[i][j]);
}
printf("\n");
}
printf("转置后的矩阵B为:\n");
for(i=0;i<r1;i++)
{
for(j=0;j<r1;j++)
{
printf("%5d ",MatBt[i][j]);
}
printf("\n");
}
break;
}
default :
{
printf("你输入的运算符有误,请重新输入!\n");
goto loop; //返回至“输入运算符”位置
}
}
loop2:
printf("你还想进行其他运算吗?请输入Y或N!\n");
getchar();
Again = getchar ();
if (Again == 'Y')
goto loop;
else if (Again == 'N')
printf("本次运算结束!\n");
else
{
printf("输入错误,请重新输入!\n");
goto loop2; //返回至输入Y或N位置
}
}
……………………………………………………………………………………………………
n=5时,在Debug模式下调试运行不会有任何问题,一旦到Release模式下运行就会崩溃,调试时出现的错误是“Unhandled exception at 0x7408fcce in Matrix.exe: 0xC0000005: Access violation writing location 0x00000001.”这是什么错误,该怎么解决呢?