2016-05-29 108 views
-5

我已经写了一个过程,创建2个矩阵并将它们相乘。然而,我必须将我的代码分成函数,并且我在声明一个将为矩阵分配内存的函数时遇到问题。C函数分配内存

这里是我的代码:

void matrixMult(){ 
int **A, **B, **C; //matrices 
int rowA, colA, rowB, colB; //rows and columns 
int i, j, k; //for iterations 

printf("Number of rows in matrix A: \n"); 
scanf("%d", &rowA); 
printf("Number of columns in matrix A: \n"); 
scanf("%d", &colA); 

printf("Number of rows in matrix B: \n"); 
scanf("%d", &rowB); 
printf("Number of columns in matrix B: \n"); 
scanf("%d", &colB); 

//memory allocation 
A = (int**)malloc(rowA * sizeof(int)); 
B = (int**)malloc(rowB * sizeof(int)); 
C = (int**)malloc(rowA * sizeof(int)); 

for (i = 0; i < rowA; i++) 
    { 
    A[i] = (int*)malloc(colA * sizeof(int)); 
    } 

for (i = 0; i < rowB; i++) 
    { 
    B[i] = (int*)malloc(colB * sizeof(int)); 
    } 

for (i = 0; i < rowA; i++) 
    { 
    C[i] = (int*)malloc(colB * sizeof(int)); 
    } 
/* 
the rest of code 
*/ 
} 

应该这个函数是什么样的?

+0

这有什么错呢?它不起作用吗?它慢吗?它会导致内存泄漏吗?难看吗? – Beta

+0

http://stackoverflow.com/questions/35542391/segmentation-fault-but-unable-to-reason-how-memory-allocation-looks-fine-to-me –

+0

http://stackoverflow.com/questions/605845/do-i-cast-result-of-malloc –

回答

3

你必须做这件事的两个方面,它们都在实践中使用:

  • 编写分配矩阵并返回结果的功能 - 你的函数将具有以下特征:int **alloc_matrix(size_t rows, size_t columns)
  • 编写一个函数,需要一个指向矩阵的指针,并返回一个状态代码 - 签名会int alloc_matrix(int*** res, size_t rows, size_t columns)

从第二个函数返回的值将表示分配内存成功或失败。

+0

其实对于矩阵/ 2d阵列来说,这是错误的。 OP应该使用正确的二维数组。 – Olaf

0

第一次分配有错误。你必须分配一个指向Ints的指针数组。

A= (int**)malloc(rowA * sizeof(int*)); 
B = (int**)malloc(rowB * sizeof(int*)); 
C = (int**)malloc(rowA * sizeof(int*)); 

的功能问题

int** alocatingArray(size_t nRows, size_t nCols){ 
... 
} 

此功能将被用于每个阵列的主要指针返回矩阵