分析下面实现的两种方法
int * matrix_multi(int a[], int b[]) 中 malloc 的空间谁去释放,只有调用这个函数的函数记得去释放才行,否则,会出现内存泄露
相比之下,int * matrix_multi2(int a[], int b[], int c[])要好些,谁调用,谁先把计算的存储条件都准备好。
#include "stdafx.h"
#include <iostream>
using namespace std;
const int M = 3;
const int N = 3;
int * matrix_multi(int a[], int b[])
{
int i = 0;
int j = 0;
int k = 0;
int temp = 0;
int *c = (int *)malloc(N * N * sizeof(int));
for (i = 0; i<N; i++)
{
for (j = 0; j < N; j++)
{
temp = i * N + j;
*(c + temp) = 0;
for(k = 0; k < N; k++)
{
*(c+temp) += a[i * N + k] * b[k * N +j];
}
}
}
return c;
}
void matrix_multi2(int a[], int b[], int c[])
{
int i = 0;
int j = 0;
int k = 0;
int temp = 0;
for (i = 0; i<N; i++)
{
for (j = 0; j < N; j++)
{
temp = i * N + j;
c[temp] = 0;
for(k = 0; k < N; k++)
{
c[temp] += a[i * N + k] * b[k * N +j];
}
}
}
}
int main(int argc, char* argv[])
{
int a[] = { 1,3,5,
2,4,6,
7,8,9};
int b[] = { 7,9,10,
2,4,6,
3,1,5};
int c[3*3] = {0};
int i = 0;
int *p = NULL;
printf("method 1: \n");
p = matrix_multi(a,b);
while(i < N*N)
{
printf("%d ", *p);
if((i+1) % N == 0)
printf("\n");
p++;
i++;
}
i = 0;
printf("method 2: \n");
matrix_multi2(a, b, c);
while(i < N*N)
{
printf("%d ", c[i]);
if((i+1) % N == 0)
printf("\n");
i++;
}
return 0;
}