2014-11-18 3 views
0

두 개의 텍스트 파일에서 행렬을 읽는 코드를 받았습니다. (올바른 가정) 나는 두 행렬을 함께 배수하는 함수를 생각해 내야합니다. C : 이중 포인터를 사용하는 행렬 곱셈

는 주어진 함수의 프로토 타입입니다 :

c를, 나는 결과 행렬 공간을 할당 malloc 전화를해야

int** matMult(int **a, int num_rows_a, int num_cols_a, int** b, int num_rows_b, int num_cols_b){ 

    int **c; 

    c = (int**)malloc(sizeof(int*)*num_rows_a); 
// c = calloc(num_rows_a, num_cols_b); 


    for (int i = 0; i < num_rows_a; i++) { 
     for (int j = 0; j < num_cols_b; j++) { 
      int sum = 0; 
      for (int k = 0; k < num_cols_a; k++) { 

       c[i][j] = a[i][k] * b[k][j] + sum; 
       sum = c[i][j]; //so that previous answer gets stored 
      } 
     } 

    } 
    return c; 
} 

: 여기

int** matMult(int **a, int num_rows_a, int num_cols_a, int** b, int num_rows_b, int num_cols_b); 

그리고 함수 내 코드입니다

또한 Xcode에서 얻는 문제는 다음과 같습니다. EXC_BAD_ACCESS

+0

더 많은 메모리를 할당해야합니다. 행에 포인터를 할당했지만 각 행을 할당하지 않았습니다. 이 문제를 고려할 때 입력 행렬을 할당하는 코드를 표시해야 할 수 있습니다. 사실, NxM 행렬에 대한 메모리를 할당하는 단일 함수가 있어야하며, 각 행렬을 할당하는 데 사용할 수 있습니다. 반환 된 행렬의 크기를 어떻게 알 수 있는지 생각할 필요가 있습니다. –

답변

0

@Stinson의 답은 이미 메모리 문제를 해결합니다. 내부 코드 블록을 조금 더 상세하게 제안 할 것입니다. 코드에 임시 sum을 가질 필요가 없습니다.

for (int i = 0; i < num_rows_a; i++) { 
    c[i] = malloc(sizeof(int)*num_cols_b); 
    for (int j = 0; j < num_cols_b; j++) { 

    // Initialize the element to zero. 
    c[i][j] = 0; 
    for (int k = 0; k < num_cols_a; k++) { 
     // Accumulate the result 
     c[i][j] += a[i][k] * b[k][j]; 
    } 
    } 
} 
1

열에도 메모리를 할당해야합니다. :

int **c; 

c = (int**)malloc(sizeof(int*)*num_rows_a); 

for(i=0;i<num_rows_a;i++) 
    c[i]=malloc(sizeof(int)*num_cols_b);  
+0

그건'c [i] = malloc (sizeof (int) * num_cols_b); ' –

+0

oh ... 일 필요가 있습니다. 그 업데이트 된 @RSahu – Stinson

+0

당신에게 맹세합니다! 완전한! 하지만 열에 메모리를 할당해야하는 이유와 첫 번째 for 루프에서 malloc을 선언 한 이유를 설명 할 수 있습니까? – aslbj15