我创建了一个typedef矩阵:
typedef struct matrix {
int m;
int n;
int **vrednosti;
} matrix ;
Run Code Online (Sandbox Code Playgroud)
和一个创建矩阵的函数:
matrix* create_matrix(int x, int y, int** val)
Run Code Online (Sandbox Code Playgroud)
但是当我设置尺寸(m和n)
mat.n = x;
mat.m = y;
Run Code Online (Sandbox Code Playgroud)
只有n实际设置.当我在设置它们之后将它们打印出来时,我会得到类似的东西
n = 3
m = -1717986919
Run Code Online (Sandbox Code Playgroud)
即使我设置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;
Run Code Online (Sandbox Code Playgroud)
}
您最有可能matrix在函数本地创建一个对象并返回其地址.该对象不存在于函数范围之外,并为您提供未定义的行为.您的实现可能看起来像:
matrix* create_matrix(int x, int y, int** val)
{
matrix mat;
mat.n = x;
mat.m = y;
return &mat;
}
Run Code Online (Sandbox Code Playgroud)
有许多方法可以解决这些问题的基本原则:
确切的方式取决于您想要实现的功能.最简单的方法是按值返回对象,或者动态分配对象.