我發現了一種在C中分配矩陣的有趣方式,它允許在不初始化的情況下使用[i][j]
作爲double matrix_a[nrows][ncols]
。分配是C中的內存分配的自由特定類型
double (*matrix_a)[ncols] = (double (*)[ncols])malloc(sizeof(double) * (nrows) * (ncols));
但我找不到如何正確地釋放這種類型的分配。它會像free(matrix_a)
那麼簡單嗎?
我發現了一種在C中分配矩陣的有趣方式,它允許在不初始化的情況下使用[i][j]
作爲double matrix_a[nrows][ncols]
。分配是C中的內存分配的自由特定類型
double (*matrix_a)[ncols] = (double (*)[ncols])malloc(sizeof(double) * (nrows) * (ncols));
但我找不到如何正確地釋放這種類型的分配。它會像free(matrix_a)
那麼簡單嗎?
這是正確的。您只能通過free
從malloc
和家人返回的內容。所以,既然你做了一個malloc
,你可以做一個free
。
此外,there is no need to cast the return value of malloc:
double (*matrix_a)[ncols] = malloc(sizeof(double) * (nrows) * (ncols));
什麼是這種分配獨特之處?典型配置+施放。 –
它的獨特之處在於我從未見過它。我用'double matrix_a [nrows] [ncols]'快速分配內存,發現這種風格尋找更有效的方法。 – mjswartz
你剛纔在堆上分配了內存。 'double a [m] [n]'在堆棧上分配,堆棧比堆(通常)更有限。這裏沒什麼特別的。 –