2016-09-29 40 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