2016-09-29 36 views
3

我發現了一種在C中分配矩陣的有趣方式,它允許在不初始化的情況下使用[i][j]作爲double matrix_a[nrows][ncols]。分配是C中的內存分配的自由特定類型

double (*matrix_a)[ncols] = (double (*)[ncols])malloc(sizeof(double) * (nrows) * (ncols)); 

但我找不到如何正確地釋放這種類型的分配。它會像free(matrix_a)那麼簡單嗎?

+0

什麼是這種分配獨特之處?典型配置+施放。 –

+0

它的獨特之處在於我從未見過它。我用'double matrix_a [nrows] [ncols]'快速分配內存,發現這種風格尋找更有效的方法。 – mjswartz

+0

你剛纔在堆上分配了內存。 'double a [m] [n]'在堆棧上分配,堆棧比堆(通常)更有限。這裏沒什麼特別的。 –

回答

6

這是正確的。您只能通過freemalloc和家人返回的內容。所以,既然你做了一個malloc,你可以做一個free

此外,there is no need to cast the return value of malloc

double (*matrix_a)[ncols] = malloc(sizeof(double) * (nrows) * (ncols)); 
+0

如果我刪除了演員,我得到錯誤:無效轉換從'void *'到'double(*)[ncols]'[-fpermissive]' – mjswartz

+1

@mjswartz那是因爲你用C++編譯器編譯,而不是C編譯器。 C++確實需要強制轉換。 – dbush