[英]can someone explain me what is happening here for using malloc for pointer
#include<stdio.h>
int main(){
int * ptr=(int *)malloc(40);
printf("%d",sizeof(ptr));
}
當我運行此命令時,輸出為8 ...這里發生了什么...為什么輸出8?
sizeof
運算符是編譯sizeof
算符,計算機上任何指針的大小均為8字節。
沒有辦法檢索由malloc
分配的內存區域的動態大小。 否則,您必須知道它,或者將其保存在某個地方。
您可能會考慮使用Boehm的保守性垃圾收集器,然后將調用GC_malloc
而不是malloc
,而無需調用free
(或GC_free
),並且可以使用GC_size(p)
來獲取以前的GC_malloc
-ed的近似大小。從p
開始的內存區域(但我不建議使用GC_size
)。
如果在Linux上使用malloc
,請學習如何使用valgrind來發現內存泄漏錯誤,並使用gcc -Wall -g
編譯
malloc()
返回指向40字節內存(可能為10 ints)的指針,並將其分配給ptr
。 sizeof(ptr)
為8的原因是因為您使用的是64位計算機,並且指針的大小為8個字節。
您應該在malloc()
sizeof()
內部使用sizeof()
,因為它是一種很好的形式,並且可以避免類型改變大小(跨平台或其他)的問題。 如果您確實想要10個整數的空間,請使用:
int *ptr = malloc(10 * sizeof *ptr);
這將分配10個ptr
點類型的大小,在本例中為int
。 這樣做的好處是您可以更改類型而無需更改malloc()
變量ptr
是一個指向int的指針,在您的系統中,它恰好具有8個字節的大小。
ptr是一個指針。它在系統上打印指針大小。 由於ptr擁有一個地址,因此在64位計算機上保留一個地址所需的大小為8個字節。 這是特定於編譯器的。您無法檢索分配給指針的大小。
如果您對此有疑問,那么您還應該對free()如何釋放內存而又不知道已分配給指針的大小有疑問。
我已經在我的Windows 32位計算機上嘗試過此操作,我得到的是4字節,我認為ptr是指向int的指針,其顯示了正確的信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.