2016-05-29 168 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){ 
... 
} 

此功能將被用於每個陣列的主要指針返回矩陣