반응형
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct tag_triple {
int row;
int col;
int value;
} triple ;
triple * input_matrix()
{
triple * a;
int rowc , colc , valuec , temp ;
int ro, co, va;
printf("input Total row col value_count : ");
scanf("%d%d%d",&rowc, &colc , &valuec );
a = ( triple * ) malloc ( sizeof(triple) * valuec );
printf("
");
a[0].row = rowc;
a[0].col = colc;
a[0].value = valuec;
for ( temp = 1 ; temp < valuec+1 ; temp ++ )
{
printf("input row col value : ");
scanf("%d%d%d", &ro, &co, &va);
a[temp].row = ro;
a[temp].col = co;
a[temp].value = va;
}
printf("
");
return a;
}
int* mul(triple *a, triple *b) {
int * res;
int a_x,a_y,a_t;
int b_x,b_y,b_t;
int temp1=0;
int temp2=0;
a_x = a[0].row;
a_y = a[0].col;
a_t = a[0].value;
b_x = b[0].row;
b_y = b[0].col;
b_t = b[0].value;
// 결과를 저장할 일반 행렬
res = (int*)malloc(sizeof(int)*a_x*b_y);
memset(res,0,sizeof(int)*a_x*b_y);
// a_m 행렬과 b_m 행렬을 곱해 봅시다.
// 두 행렬을 곱해서 res에 저장하기만 하면 됨.
for ( temp1 = 1 ; temp1 < a_t+1 ; temp1++ )
{
for ( temp2 = 1 ; temp2 < b_t+1 ; temp2++ )
{
if ( a[temp1].col == b[temp2].row ) {
*(res + ( a[temp1].row-1) * b_y + b[temp2].col-1) += a[temp1].value * (b[temp2].value);
}
}
}
return res;
}
void print(int* res, int row, int col)
{
int *t = res;
int temp1 = 0;
int temp2 = 0;
// 출력할때 row 와 col을 보고 res를 출력해 준다.
for ( temp1 = 0 ; temp1 < row ; temp1++ )
{
for ( temp2 = 0 ; temp2 < col ; temp2++ )
{
printf("%3d ", *t);
t++;
}
printf("
");
}
}
int main(void)
{
triple *a = NULL;
triple *b = NULL;
int *res = NULL;
a = input_matrix();
b = input_matrix();
res = mul(a,b);
print(res, a->row, b->col);
//free(a);
//free(b);
//free(res);
return 0;
}
=======================================================================
문제는 free시키는데서 세그멘테이션 에러가 뜬다.
함수안에서 malloc시키고 밖에서 free를 해 주어서 그런건가?
정확한 이유는 아직 찾지 못했다.
반응형
'공부 > 컴퓨터' 카테고리의 다른 글
유닉스 계열의 퍼미션 설정 (0) | 2004.03.25 |
---|---|
[한겨례] 인터넷 회원관리 생년월일로 충분 (0) | 2004.03.25 |
20040317 - Linux (0) | 2004.03.17 |
Intel Pentium Instruction Format (0) | 2004.03.16 |
[ZDNET] [유춘희의 IT 눈대목] 죽으라고 일만 하시는 분들에게 드림 (0) | 2004.03.03 |