私の2次元動的配列を使って別の2次元動的配列を作成し、最初の配列の値を書き換える関数を呼び出すとします。私は私が総ヒープ使用率を取得valgrind --leak-check=yes
でそれを確認した場合2次元配列を書き直すときにメモリリークが発生する
#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;
}
:6つのallocs、3を解放し、割り当てられた240のバイトをので、コードは次のようなものです。どのようにしてこのメモリリークを解決できますか?
ようこそスタックオーバーフロー! ['malloc()'と 'C 'のファミリーの戻り値をキャストしない理由についてのこのディスカッションを参照してください。](http://stackoverflow.com/q/605845/2173917)。 –