如何删除2D动态分配的矩阵?

时间:2018-01-31 03:42:15

标签: c++ matrix 2d dynamic-allocation

我有一个完整的程序,它使用指针,动态分配和数组等。

我给我的最后一个函数是删除矩阵的函数。 以下是给定的信息:

/*
  Deletes a two dimensional dynamically allocated matrix
  -- rows: The number of rows in the matrix
  -- **matrix: the matrix to be deleted
*/
void delete_matrix(int rows, char **matrix)
{
  delete[] matrix;
}

我的问题是,这是对的吗?还有为什么是传入行的值?

1 个答案:

答案 0 :(得分:0)

使用动态分配的数组,您可以将它们视为数组数组。幕后发生的事情是有一个指向指针数组的指针,你必须为每一个指针释放内存,而不仅仅是主指针。简而言之,您需要行数,因为您需要删除数组中的每一行以避免在删除主数组之前发生内存泄漏。
看起来应该是这样的:

/*
  Deletes a two dimensional dynamically allocated matrix
  -- rows: The number of rows in the matrix
  -- **matrix: the matrix to be deleted
*/
void delete_matrix(int rows, char **matrix)
{
  for(int i = 0; i < rows; ++i)
  {
     delete matrix[i];
  }

  delete[] matrix;
}

修改 以上假设您使用new来创建数组。如果您使用了malloc,则需要将free(matrix)代替delete[] matrix并将free放在for()循环中,而不是删除。