由于二维矩阵是一个单独的数组,所以这段代码应该可以用于二维矩阵。我必须转换输入矩阵。转置、打印和读取值的代码都是可以的,但是我不能使用函数创建一个新的矩阵来将转置后的值放在那里。代码如下:
#include<stdio.h>
#include<stdlib.h>
struct Matriz {
int *p;
int lin, col, N;
};
typedef struct Matriz Matriz;
Matriz* CriaMatriz (int nlinhas, int ncolunas){
int tam=(nlinhas)*(ncolunas);
Matriz *a;
(*a).p=malloc(tam*sizeof(int));
(*a).col=ncolunas;
(*a).lin=nlinhas;
(*a).N=tam;
return a;
}
Matriz* TranspoeMatriz (Matriz *m){
int a=(*m).col;
int b=(*m).lin;
Matriz *t=CriaMatriz(a,b); //THE PROBLEM HAPPENS HERE AND ALL THE PROGRAM SHUT DOWN
//some code
return t;
}
int main(){
int o,p;
scanf("%d%d",&o,&p);
Matriz *g=CriaMatriz(o,p);
Matriz *tra=TranspoeMatriz(g);
}
我试着用以下方法替换出现问题的线路:
Matriz *t;
(*t).p=malloc((a*b)*sizeof(int));
(*t).col=b;
(*t).lin=a;
(*t).N=a*b;
一切都很好,但我必须使用CriaMatriz函数来创建新的Matriz结构。我用了很多printf来查找程序停止的地方,我漏掉了一堆打印代码输出和scanf函数的函数。
最佳答案
必须分配内存才能创建Matrix
实体:
Matriz *a;
a = (Matriz*) malloc(sizeof(Matriz));