这段代码应该与二维矩阵一起工作,因为它们是一个单一的数组。我必须转置输入矩阵。转置、打印和读取值的代码都可以,但我无法使用该函数创建一个新矩阵来将转置值放在那里。这是代码:
#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));
关于c - 在另一个函数中使用创建结构函数会关闭程序。有小费吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305117/