【问题标题】:Free specific type of memory allocation in C在 C 中释放特定类型的内存分配
【发布时间】:2016-09-29 12:35:24
【问题描述】:

我发现了一种在 C 中分配矩阵的有趣方法,它允许使用 [i][j] 而无需初始化为 double matrix_a[nrows][ncols]。分配是

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

但我找不到如何正确释放这种类型的分配。会不会像free(matrix_a) 这么简单?

【问题讨论】:

  • 这个分配有什么独特之处?典型的分配+演员。
  • 它的独特之处仅在于我以前从未见过它。我很快就用 double matrix_a[nrows][ncols] 分配了内存,发现这种风格正在寻找更有效的方法。
  • 你刚刚在堆上分配了内存。 double a[m][n] 在堆栈上分配,堆栈比堆更受限制(通常)。这里没有什么特别的。
  • 更好的是,使用malloc( sizeof(double[nrows][ncols]) )。自我记录的代码是好的代码。

标签: c malloc free


【解决方案1】:

没错。您只能将malloc 和家人返回的内容传递给free。所以既然你做了一个malloc,你就做一个free

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

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

【讨论】:

  • 如果我删除演员表,我会得到error: invalid conversion from ‘void*’ to ‘double (*)[ncols]’ [-fpermissive]
  • @mjswartz 那是因为您使用的是 C++ 编译器,而不是 C 编译器。 C++ 确实需要强制转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多