如何防止内存泄漏

时间:2014-11-04 03:13:39

标签: c memory

我应该编写将二维矩阵提升到一定功率的代码,并且我也不应该让任何内存泄漏发生。我已经编写了这个函数(它使用了我写的另一个函数,产品,但你可以忽略它),我无法看到内存泄漏会发生在哪里,但我也是新手。任何帮助指出我如何使这更有效率将不胜感激。谢谢。

int **matrixPower(int **A, int size, int n){
      int **a = NULL;
      a = (int **)malloc(size * sizeof(int*));
      int i;
      for (i = 0; i < size; i++){
        a[i] = (int *)malloc(size * sizeof(int));
      }
      a = A;
      for (i = 0; i < n; i++){
        a = product(a, A, size);
      }
      return a;
    }

3 个答案:

答案 0 :(得分:1)

dasbllinkenlight's comment是正确的。只要你记得删除你创建的每个指针,就不应该有内存泄漏。 想想这一行

a = (int **)malloc(size * sizeof(int*));
...
a = A;

您正在创建一个指向指针列表的指针,并将它们放在a中。 然后,您将在此指针数组中指向int数组。 在此之后,您正在制作a=A。 除非我在这里遗漏了一些东西,否则看起来你创建了一个指针列表然后删除了引用。

答案 1 :(得分:0)

将“a”分配为长度为

的int指针数组

然后,对于数组中的每个元素,您将分配一个长度为大小的int指针数组。

然后你做

a = A;

其中A是来自函数外部的int **。这会覆盖您刚刚分配的所有内存的唯一指针。记忆泄漏那里。

答案 2 :(得分:0)

我认为不是A = a,而是错误地指定了a = A.因此,您创建了2D数组并用其他值覆盖该2D指针。这里创建的指针丢失了。这导致了内存泄漏问题

相关问题