2014-11-04 95 views
-1

我應該編寫能夠將二維矩陣提升爲某種能力的代碼,並且我也不應該讓任何內存泄漏發生。我已經編寫了這個函數(它使用了我編寫的另一個函數,產品,但您可以忽略它),並且我無法看到內存泄漏的發生位置,但我對此也很陌生。任何幫助指出我可以如何使這種效率更高,將不勝感激。謝謝。如何防止內存泄漏

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; 
    } 
+10

提示:每次有'malloc'沒有相應的'free'時都會發生泄漏。 – dasblinkenlight 2014-11-04 03:16:26

+0

爲使您的代碼更容易使用,將矩陣存儲在同樣包含當前尺寸的結構中 – 2014-11-04 03:33:07

+0

將'malloc'和'free'放在同一代碼塊中將使您的生活更輕鬆 – bpceee 2014-11-04 03:35:24

回答

1

dasbllinkenlight's comment是正確的。只要你記得刪除你創建的每個指針,就不應該有內存泄漏。 想想這行

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

你正在創建一個指向指針列表並將其放置於a。 然後你在這個指針數組中指向int數組。 在此之後,您正在製作a=A。 除非我在這裏失去了一些東西,它看起來像你創建了一個指針列表,然後刪除了引用。

+0

但是不要刪除你正在返回的那個! – 2014-11-04 03:35:26

0

您分配「A」作爲長度尺寸的INT指針數組

然後,對於陣列中的每個元素你分配長度尺寸的INT指針數組。

然後你做

a = A; 

其中A是是INT **從功能外面傳來。這將覆蓋您指向所有剛剛分配的內存的唯一指針。內存泄漏。

0

我認爲,而不是A = a,你錯誤地分配了= A。因此,您創建了二維數組並用其他值覆蓋了該2D指針。這裏創建的指針會丟失。這導致了內存泄漏問題