我发现了一种在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]'在堆栈上分配,堆栈比堆(通常)更有限。这里没什么特别的。 –