为结构设置值对我不起作用。(C)

为结构设置值对我不起作用。(C),c,matrix,setting,C,Matrix,Setting,我创建了一个typedef矩阵: typedef struct matrix { int m; int n; int **vrednosti; } matrix ; 以及创建矩阵的函数: matrix* create_matrix(int x, int y, int** val) 但是当我设置尺寸m和n时 mat.n = x; mat.m = y; 只有n被实际设置。 当我把它们设置好后打印出来时,我会得到类似的结果 n = 3 m = -1717986919 即使我设置了n=3和m

我创建了一个typedef矩阵:

typedef struct matrix {
int m;  
int n;
int **vrednosti;
} matrix ;
以及创建矩阵的函数:

matrix* create_matrix(int x, int y, int** val)
但是当我设置尺寸m和n时

mat.n = x;
mat.m = y;
只有n被实际设置。 当我把它们设置好后打印出来时,我会得到类似的结果

n = 3
m = -1717986919
即使我设置了n=3和m=3

完整代码:

typedef struct matrix {
int m;  
int n;
int **vrednosti;
} matrix ;


matrix* create_matrix(int x, int y, int** val){
matrix mat;
mat.n = x;
mat.m = y;
mat.vrednosti = val;
matrix* trol = &mat;
return trol;
}


int main(int argc, char* argv[]){
int n = *argv[1]-'0';
int m = *argv[2]-'0';

int i,j;
int** tab;
tab = (int**)malloc(n*sizeof(int*));
for(i=0; i<n; i++){
    tab[i] = (int*)malloc(m*sizeof(int));   
}

for(i=0; i<n; i++){
    for(j=0; j<m; j++){
        scanf("%d",&tab[i][j]);
    }
}

matrix* mat;
mat = create_matrix(n,m,tab);
printf("%d ",(*mat).n);
printf("%d ",(*mat).m);4

return 0;

}

您很可能创建了函数本地的矩阵对象并返回其地址。对象不存在于函数的范围之外,并提供未定义的行为。您的实现可能类似于:

matrix* create_matrix(int x, int y, int** val)
{
       matrix mat;
       mat.n = x;
       mat.m = y;

       return &mat;
}
有许多方法可以解决这个问题,其中每一条规则的基本原则是:

要延长object的生存期,即使在函数退出后也会返回其地址。
具体方式取决于您想要实现的功能。最简单的方法是按值返回对象本身,或者动态分配对象。

您能给我们看一下您的所有代码吗?