C-重写2D数组时的内存泄漏



我想调用一个函数,该函数使用我的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()可用的记忆。

相关内容

  • 没有找到相关文章

最新更新