[英]Shrink matrix with 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檢查內存泄漏:
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
如果我在n> 1的情況下重新分配給n * sizeof(int),則不會發生泄漏。為什么會發生這種情況?
當減小mat
數組的大小時,您會丟失一些mat[i]
指針。 即mat[1]
和mat[2]
。 您需要手動free
,將在收縮過程中丟失任何指針realloc
做之前realloc
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.