2012-02-21 6 views
0

現在、私は学校(行列乗算器)プロジェクトに取り組んでおり、問題があります。 は2次元配列を割り当てることができませんC

は、私は2次元配列の行列をreprensent、私はそれをこのように割り当てる:

typedef struct matrix 
{ 
    int** matrix; 
    unsigned int l; 
    unsigned int c; 
} matrix; 


int matrix_alloc(matrix** matr, unsigned int l, unsigned int c) 
{ 
    unsigned int i, j; 
    *matr = malloc(sizeof(matrix));        /* Allocate memory for the structure */ 

    if (*matr == NULL)             /* Check if malloc succeeded    */ 
    { 
     fprintf(stderr, "malloc error");          /* If not print error      */ 
     return -1; 
    } 

    (*matr)->matrix = malloc(l*sizeof(int*));   /* Allocate memory for columns of the matrix*/ 

    if ((*matr)->matrix == NULL) 
    { 
     fprintf(stderr, "malloc error"); 
     free(*matr); 
     return -1; 
    } 

    for (i = 0; i < l; i++) 
    { 
     (*matr)->matrix[i] = malloc(c*sizeof(int)); 

     if ((*matr)->matrix[i] == NULL) 
     { 
      fprintf(stderr, "malloc error"); 

      for (j = 0; j < i; j++) 
      { 
       free((*matr)->matrix[j]); 
      } 

      free(*matr); 
      return -1; 
     } 

     for (j = 0; j < c; j++) 
     { 
      (*matr)->matrix[i][j] = 2; // Matrix should be filled with 2 for tests 
      printf("Element added : %d\n", (*matr)->matrix[i][j]); 

     } 
    } 

    (*matr)->l = l; 
    (*matr)->c = c; 
    printf("will print matrix----------------------\n"); 
    matrix_print(*matr); 
    return 0; 
} 

をそして、これは私が行列を印刷する方法である

void matrix_print(matrix* m) 
{ 
    unsigned int i, j; 
    int v; 
    printf("********************************************************************************\n"); 
    printf("Lines:\t %i\n", m->l); 
    printf("Cols:\t %i\n", m->c); 
    printf("Matrix::\n"); 

    for (i = 0; i < m->l; i++) 
    { 
     for (j = 0; j < m->c; j++) 
     { 
      matrix_get_elem_at(v, i, j, m); 
      printf("\t%d", v); 
      /*printf("\t%ld", mpz_get_si(v)); */ 
     } 

     printf("\n"); 
    } 

    printf("********************************************************************************\n"); 
} 

私は

 matrix* matr; 
     /* alloc matrix */ 
     assert(matrix_alloc(&matr, 10, 10) == 0); 
     printf("----------------------------will print test matrix\n"); 
     matrix_print(matr); 

私のマトリックスは2の代わりに32767で埋められます

誰かがこのバグを取り除く手伝いをしてくれますか?それは、最初のパラメータのint*を取得する必要があります -

は、あなたが私たちに多くのコードが表示されるはずです(?たとえば、どのようにあなたがtypedef matrixを宣言しなかった)しかし、私は問題はmatrix_get_elem_atであることを賭ける

ベン

答えて

2

をありがとう。 not int

+0

私は行列構造体を追加しました。 –

+0

OK。 'matrix_get_elem_at'はどうでしょうか? (私は正しいのですか?) – asaelr

+0

はい私はあなたが正しいと思います。私はintではなくintを与えるべきです。 ありがとうございます! –

0

私はあなたに助言を与えるかもしれない場合は、1つの連続した配列として行列を表現するほうがよいでしょう。この場合、行は次々と位置指定されます。like Row1| Row1| ... |Row(col)。例えば

[1, 2, 3] 
[4, 5, 6] 

はあなたがmatrix[ i*colCount + j ]を使うelement at [i][j]アクセスするには

int** matrix = (int**)malloc(sizeof(rowCount*colCount)) 

を使用するマトリックスを作成するには

[1, 2, 3, 4, 5, 6] 

になります。

ほとんどの関数は、書くのがはるかに簡単です。

関連する問題