0
現在、動的メモリ割り当ての仕組みを理解しようとしています。Reallocを使用したシュリンクマトリックス
int main()
{
int **mat, i;
mat = calloc(3, sizeof(int*));
for(i = 0; i < 3; i++)
mat[i] = calloc(3, sizeof(int));
mat = realloc(mat, 1*sizeof(int*));
for(i = 0; i < 1; i++)
mat[i] = realloc(mat[i], 1*sizeof(int));
for(i = 0; i < 1; i++)
free(mat[i]);
free(mat);
return 0;
}
私はメモリリークのためvalgrindのを確認しています:私は、n個の*のはsizeof(int型)ここで、n> 1に再割り当てする場合
24 bytes in 2 blocks are definitely lost in loss record 1 of 1
at 0x4C2C975: calloc (vg_replace_malloc.c:711)
by 0x400605: main (main.c:10)
LEAK SUMMARY:
definitely lost: 24 bytes in 2 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 0 bytes in 0 blocks
suppressed: 0 bytes in 0 blocks
リークが発生しない 私はこのコードを持っています。 なぜこれが起こっていますか?
'mat'配列のサイズを小さくすると、' mat [i ]'ポインタの一部が失われてしまいます。すなわち 'mat [1]'と 'mat [2]'です。 – kaylum