为结构体设置值对我来说不起作用.(C)



我创建了一个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对象并返回它的地址。该对象不存在于函数范围之外,并且会给您未定义的行为。您的实现可能看起来像这样:

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

解决这个问题的方法有很多,每条规则的基本原则是:

  • 即使在函数退出后也增加对象(返回的地址的)的生命周期。

确切的方法取决于你想要实现的功能。最简单的是按值返回对象本身,或者动态分配对象。

相关内容

  • 没有找到相关文章

最新更新