我对 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/