2016-07-13 4 views
0

2つの行列の乗算を伴う問題に取り組んでおり、ユーザーから要素を取得する必要があります。しかし、それらを印刷するときに要素を取得した後、第1の行列の最後の要素は第2の行列の最初の要素と等しくなります。その結果、私は正しい結果を得られません。誰かが手伝ってもらえれば私は義務づけられます。ありがとう。1つの配列の最後の要素が次の配列の最初の要素で上書きされます

#include<stdio.h> 
int main(){ 
    int i, j, k, n; 
    // get the size of the square matrices from user 
    scanf("%d", &n); 

    // allogate memory for the matrices 
    int * mul_1 = calloc(n, sizeof(int)); 
    int * mul_2 = calloc(n, sizeof(int)); 
    int * mul_3 = calloc(n, sizeof(int)); 

    //get data from user 
    for(i=0; i<n; i++){ 
     for(j=0; j<n; j++){ 
      scanf("%d", mul_1+n*i+j); 
     } 
    } 
    for(i=0; i<n; i++){ 
     for(j=0; j<n; j++){ 
      scanf("%d", mul_2+n*i+j); 
     } 
    } 
    // display matrices 
    printf("Entered matrices are:\n =First=\n"); 
    for(i=0; i<n; i++){ 
     for(j=0; j<n; j++){ 
      printf("%d\t", *(mul_1+n*i+j)); 
     } 
     printf("\n"); 
    } 
    printf("=Second=\n"); 
    for(i=0; i<n; i++){ 
     for(j=0; j<n; j++){ 
      printf("%d\t", *(mul_2+n*i+j)); 
     } 
     printf("\n"); 
    } 

    //begin matrix multiplicaition 
    for(i=0; i<n; i++){ 
     for(j=0; j<n; j++){ 
      int sum = 0; 
      for(k=0; k<n; k++){ 
       int a = *(mul_1 + n*i + k); 
       int b = *(mul_2 + n*k + j); 
       sum += a*b; 
      } 
      *(mul_3 + i*n + j) = sum; 
     } 
    } 
    //display results 
    printf("Result:\n"); 
    for(i=0; i<n; i++){ 
     for(j=0; j<n; j++){ 
      printf("%d\t", *(mul_3+n*i+j)); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 
+1

mul_3にはnを割り当てますが、mul_3にはi * n + jでアクセスします。 – Holger

+3

あなたは 'n'要素のための領域を割り当てて、それに' n * n'要素を格納しているからです? – immibis

答えて

1

あなたはn*n行列であるように思わmul_1mul_2mul_3のために十分なスペース(n)を割り当てません。

この種のエラーを検出するには、valgrindを使用できます。

+0

"valgring" - > "valgrind" –

+0

@IanAbbottコメントありがとうございました:) – blatinox

+0

ああ、私の悪い、それを指摘していただきありがとうございます。 – akash

関連する問題