由于二维矩阵是一个单独的数组,所以这段代码应该可以用于二维矩阵。我必须转换输入矩阵。转置、打印和读取值的代码都是可以的,但是我不能使用函数创建一个新的矩阵来将转置后的值放在那里。代码如下:

#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));

09-25 17:58