我想调用一个函数,该函数使用我的2D动态数组创建另一个2D动态数组,然后重写我的第一个数组的值。因此,代码就是这样:
#include <stdio.h>
#include <stdlib.h>
int **bigger(int **A)
{
int i;
int **A2 = (int **)malloc(10 * sizeof(int *));
for(i = 0; i < 10; i++)
A2[i] = (int *)malloc(10 * sizeof(int));
return A2;
}
int main(void)
{
int i;
int **A = (int **)malloc(5 * sizeof(int *));
for(i = 0; i < 5; i++)
A[i] = (int *)malloc(5 * sizeof(int));
A = bigger(A);
for(i = 0; i < 10; i++)
free(A[i]);
free(A);
return 0;
}
如果我使用valgrind --leak-check=yes
进行检查,我将获得总堆的用法:分配了6个Allocs,3个Frees,240字节。如何解决此内存泄漏?
tl:dr ,您不是重写,您是 oftriting 。<<<<。/p>
问题在
中 A = bigger(A);
在bigger()
功能中,您正在分配新的记忆,然后将同样的回忆存储回A
,这使您失去了以前分配的记忆的指针,因此将它们呈现为 notable ,而不是 free()
--d。这些导致这里泄漏。
您需要使用realloc()
进行调整大小malloc()
ED内存区域。
否则,在您再次致电malloc()
之前,在bigger()
内,您应该进行free()
可用的记忆。