0

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;

}

4

1 に答える 1

7

ほとんどの場合matrix、関数に対してローカルなオブジェクトを作成し、そのアドレスを返します。オブジェクトは関数の範囲外には存在せず、未定義の動作を引き起こします。実装はおそらく次のようになります。

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

       return &mat;
}

問題を解決するにはいくつかの方法があります。これらの各ルールの基本は次のとおりです。

  • 関数が終了した後でも、オブジェクトの寿命を延ばす (誰のアドレスが返されるか)。

正確な方法は、達成したい機能によって異なります。最も単純なのは、オブジェクト自体を値で返すか、オブジェクトを動的に割り当てることです。

于 2013-03-30T15:31:02.120 に答える