C 重写二维数组时内存泄漏
我想调用一个函数,该函数使用我的2d动态数组创建另一个2d动态数组,然后重写第一个数组的值。代码是这样的:C 重写二维数组时内存泄漏,c,pointers,memory-leaks,malloc,dynamic-memory-allocation,C,Pointers,Memory Leaks,Malloc,Dynamic Memory Allocation,我想调用一个函数,该函数使用我的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 *)mal
#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;
}
#包括
#包括
整数**更大(整数**A)
{
int i;
int**A2=(int**)malloc(10*sizeof(int*);
对于(i=0;i<10;i++)
A2[i]=(int*)malloc(10*sizeof(int));
返回A2;
}
内部主(空)
{
int i;
int**A=(int**)malloc(5*sizeof(int*);
对于(i=0;i<5;i++)
A[i]=(int*)malloc(5*sizeof(int));
A=更大(A);
对于(i=0;i<10;i++)
自由(A[i]);
免费(A);
返回0;
}
如果我用
valgrind--leak check=yes
检查它,我会得到堆的总使用量:6个alloc,3个frees,240个字节分配。如何解决此内存泄漏问题?TL:DR,您不是在写,而是在覆盖
问题在于
A = bigger(A);
在biger()
函数中,您正在分配新的内存,然后将其存储回A
,这会使您丢失指向以前分配的内存的指针,从而使它们无法访问并且不是空闲的()
-d。这些导致了这里的泄漏
您需要使用来调整已malloc()
ed内存区域的大小
否则,在再次调用
malloc()
之前,在biger()
内部,您应该释放可用内存。TL:DR,您不是在写,而是在覆盖
问题在于
A = bigger(A);
在biger()
函数中,您正在分配新的内存,然后将其存储回A
,这会使您丢失指向以前分配的内存的指针,从而使它们无法访问并且不是空闲的()
-d。这些导致了这里的泄漏
您需要使用来调整已malloc()
ed内存区域的大小
否则,在再次调用malloc()
之前,在biger()
中,您应该释放可用内存。但是如果我的函数中需要另一个原始数组的副本,比如A和A2,我该如何解决这个问题,我执行任务,然后返回A2?但是如果我在函数中需要原始数组的另一个副本,比如A和A2,我执行任务,然后返回A2,我该如何解决这个问题?