簡體   English   中英

縮小矩陣並重新分配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM