c语言二维数组错误语法,关于c语言动态分配二维数组free的错误求dalao看看怎么回事谢谢啊~~~~...

typedef struct {

int**data;

int row;

int col;

}MyMatrix;

typedef MyMatrix* Matrix;

/*

编写矩阵输入函数 INPUT_MAT,通过该函数完成矩阵的输入并返回保

存矩阵的数组和对应矩阵的行数、列数。(不能使用全局变量)

*/

Matrix INPUT_MAT() {

int m_row, m_col;

printf("输入要创建的矩阵的行数和列数:");

scanf("%d%d", &m_row, &m_col);

if (m_row <= 0 || m_col <= 0) {

printf("输入的行数和列数错误!矩阵创建失败!\n");

return NULL;

}

Matrix mat = (Matrix)malloc(sizeof(MyMatrix));

mat->row = m_row;

mat->col = m_col;

mat->data = (int **)malloc(sizeof(int *)*m_row);

printf("输入矩阵的元素:\n");

for (int i = 0; i < m_row; i++) {

mat->data[i] = (int *)malloc(sizeof(int)*m_col);

for (int j = 0; j < m_col; j++)

scanf("%d", &mat->data[i][j]);

}

printf("矩阵创建成功!\n");

return mat;

}

/*

编写矩阵输出函数 OUTPUT_MAT,通过该函数完成矩阵的输出。

*/

void OUTPUT_MAT(Matrix mat) {

printf("矩阵输出如下:\n");

for (int i = 0; i < mat->row; i++) {

for (int j = 0; j < mat->col; j++)

printf("%d ", mat->data[i][j]);

printf("\n");

}

}

/*

清理矩阵

*/

void Clean_Mat(Matrix mat) {

for (int i = 0; i < mat->row; i++)

free(mat->data[i]);

free(mat->data);

free(mat);

}

/*

求矩阵的转置,矩阵的转置 A’=(aji)n×m,转置前输出原矩阵,转置后输

出转置矩阵。

*/

Matrix Transpose_Mat(Matrix mat) {

Matrix target = (Matrix)malloc(sizeof(MyMatrix));

target->row = mat->col;

target->col = mat->row;

target->data = (int**)malloc(sizeof(int*)*target->row);

for (int i = 0; i < target->row; i++)

target->data[i] = (int *)malloc(sizeof(target->col));

for (int i = 0; i < target->row; i++)

for (int j = 0; j < target->col; j++)

target->data[i][j] = mat->data[j][i];

return target;

}

void Transpose_Function() {

system("cls");

printf("当前功能:矩阵的转置\n");

Matrix mat = INPUT_MAT();

if (!mat) {

int b;

do {

printf("输入0回到主菜单:");

scanf("%d", &b);

} while (b != 0);

return;

}

Matrix target = Transpose_Mat(mat);

printf("转置前");

OUTPUT_MAT(mat);

printf("转置后");

OUTPUT_MAT(target);

int b;

do {

printf("输入0回到主菜单:");

scanf("%d", &b);

} while (b != 0);

Clean_Mat(mat);

Clean_Mat(target);

return;

}

free原始数组没问题,但是free转置后的数组就会出现错误,不知道为什么啊。。。跪求大佬帮我看看哪里出现错误了?

6572e0784713d8757bf47948bb66b059.png

ae959fd945f0fa7daab9b305c6772451.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值