gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:26 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com