簡體   English   中英

C中數組的動態內存分配

[英]Dynamic Memory Allocation for Arrays in C

所以我正在嘗試使用malloc在C中創建一個動態數組,但由於某種原因它沒有用完。 這是我的代碼:

    int* test = (int*) malloc(20 * sizeof(int));
    printf("Size: %d\n", sizeof(test));

當我運行這段代碼時,控制台輸出8,盡管理想情況下它應該輸出80,我相信,因為int的大小是4,而我正在創建20個。 那么為什么這不起作用呢? 謝謝你的幫助。 :)

sizeof運算符返回int*的大小,這只是一個指針。 在C中,當您使用動態分配內存malloc ,調用malloc指針返回到的存儲器中的新分配的塊(通常在堆上。)的指針本身只是一個存儲器地址(其通常只占用4首或8個字節在大多數現代系統上)。 您需要跟蹤自己分配的實際字節數。

C語言只跟蹤靜態分配的緩沖區(堆棧數組)的緩沖區大小,因為數組的大小在編譯時可用。

int test[100];
printf("Sizeof %d\n", sizeof(test))

這將打印一個等於100 * sizeof(int) (在大多數現代機器上通常為400)

這里sizeof運算符給你存儲int*所需的字節數
即它等於sizeof(int*);
根據編譯器,它可能會給你48

在C中,程序員可以跟蹤動態分配的字節數。

如果你試圖打印sizeof(&test)的值,你將獲得80(20 * 4)。 &test的類型為int(*)[20]。

我希望它能澄清你的疑問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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