2016-07-26 15 views
1

私は助けが必要です。構造体の要素であるダイナミックマトリックスを作成して使用する方法を学びたいと思います。マトリクスをゼロ(0)で塗りつぶしてプリントしたいと思っています。ここにコードは構造体内の動的マトリックス、Cプログラミング

#include <stdio.h> 
#include <stdlib.h> 

typedef struct matrica 
{ 
    int **mat; 
    int dim; //this is dimension of squared matrix 

}MATRICA; 

void form_matrix(MATRICA *matrica); 

int main() 
{ 

    MATRICA matrix; 

    form_matrix(&matrix); 


    return 0; 
} 

void form_matrix(MATRICA *matrica) 
{ 
    int i, j; 
    MATRICA *br; 

    do 
    { 
     printf("Size of matrix "); 
     scanf("%d", &br->dim); 

    }while(br->dim < 4 || br->dim > 6); 

    matrica->mat = (int **) calloc(br->dim, sizeof(int *)); 

    for(i = 0; i < br->dim; i++) 
    { 
     matrica->mat[i] = (int *) calloc(br->dim, sizeof(int)); 

     for(j = 0; j < br->dim; j++) 
     { 
      matrica->mat[i][j] = 0; 
     } 
    } 

    for(i = 0; i < br->dim; i++) 
     for(j = 0; j < br->dim; j++) 
      printf("%d ", matrica->mat[i][j]); 

} 

私は間違って何をしていますか、私のループ内の機能は一度だけ誰かが私に説明することができますか?

+0

which loop?複数のループがあります。 –

+0

行列を初期化してゼロで充填するときに最初に意図されたループ – TheNemesis584

+2

'br'の目的は何ですか?それをなぜ初期化しないのですか? – jxh

答えて

1

初期化されていないポインタbrを逆参照しているため、プログラムが未定義の動作を示します。あなたはそれを必要としません、次元入力を格納する変数が必要です。

int i, j, dim; 

do 
{ 
    printf("Size of matrix "); 
    if (scanf("%d", &dim) != 1) { 
     printf("scan failed\n"); 
     exit(EXIT_FAILURE); 
    } 

}while(dim < 4 || dim > 6); 

matrica->dim = dim; 
/* ... replace all instances of br->dim with dim */ 
+0

これは理解していますが、構造体からdimを使用したいので、なぜなら、他の関数の中で後で使うことができるように、構造体内に数値を格納する必要があるということです。 – TheNemesis584

+0

'matrica-> dim = dim; '? – jxh

+0

ああ、申し訳ありません、今私は何が起こったのを見て、非常に@jxhありがとう – TheNemesis584