簡體   English   中英

有人可以解釋一下我在使用malloc作為指針時發生了什么

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

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