c - C中的动态内存分配重复

标签 c arrays memory memory-management

我对 C 编程有些陌生。我对动态内存分配有疑问。以下是主程序中内存分配的一段代码。

double **mat=(double**)malloc(sizeof(double*)*n);
mat[0]=(double*)calloc(sizeof(double),n*n);
for(i=1; i<n; i++)
mat[i] = mat[i-1] + n;
mat = create_square_matrix(n);

我想调用函数并在函数内部的矩阵中创建元素。我是否再次在函数内部分配内存,如下所示,或者是否有任何其他方法可以避免这种繁琐的内存分配重复。以下是函数。

`double** create_square_matrix(int n)
{
int i,j,sum=0;
double **array2=(double**)malloc(sizeof(double*)*n);
array2[0]=(double*)calloc(sizeof(double),n*n);
for(i=1; i<n; i++)
array2[i] = array2[i-1] + n;
for (i = 0; i < n; ++i)
  {
      for (j = 0; j < n; ++j)
      {
        sum=sum+j;
        array2[i][j]=sum;
      }
  }
return array2;
}

` 上面的函数返回存储在“mat”变量中的数组。另一个问题是如何在使用 return 方法后释放函数内部变量“array2”的内存。在返回数组之前,我可能无法释放内存。有没有一种方法可以释放上述函数中的内存。

最佳答案

您的函数 create_square_matrix 分配内存,然后用一些值填充它。

您的顶部代码分配内存,然后调用 create_square_matrix 再次分配内存。这就像先拖地板,然后再调用同样拖地板的看门人。您不需要分配内存两次。这不仅是不必要的,而且实际上是不好的。由于您执行了两次分配,因此第一个分配的内存丢失了,并且无法释放它。这称为内存泄漏。而不是

double **mat=(double**)malloc(sizeof(double*)*n);
mat[0]=(double*)calloc(sizeof(double),n*n);
for(i=1; i<n; i++)
mat[i] = mat[i-1] + n;
mat = create_square_matrix(n);

你应该写

double **mat = create_square_matrix(n);

关于c - C中的动态内存分配重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36952907/

相关文章:

javascript - 在 JavaScript 中遍历负数组索引

javascript - 我将如何减少这个数组以便每个对象中的对象合并 javascript 但不知道键值名称

c - 使用函数在C中动态调整大小的数组

c++ - 本地 CGEventRef 是否被视为指针?

java - 实现接口(interface)的 Java 对象如何存储在内存中?

c - 在 C 中访问 union 体成员的成员

c++ - 指向限定和非限定类型表示的指针

javascript - 在动画 Google 条形图标签中使用数组索引/变量

c - 守护进程/后台通过脚本从另一个程序启动的进程

c - 如何减少下面代码执行的时间?