2010-03-19 71 views
2

看到這個例子!我如何返回我用malloc分配的指針的大小?



int main(int argc, char ** argv) 
{ 
    int *ptr = malloc(100 * sizeof (int)); 

    printf("sizeof(array) is %d bytes\n", sizeof(ptr)); 
}

printf函數只返回4個字節! 有什麼不對?

非常感謝!

+0

Okey傢伙,我承諾,sizeof不能返回分配malloc的塊的數量,所以,它是怎麼回事?有另一種方法嗎? 再次感謝。 – drigoSkalWalker 2010-03-19 15:01:27

+1

不,沒有可移植的方式來「詢問」分配了多少內存。正如@unwind所說的,你必須自己記住它。 – 2010-03-19 15:04:36

+0

可能重複[如何從C中的指針獲取數組大小](http://stackoverflow.com/questions/232691/how-can-i-get-the-size-of-an-陣列從-A-指針在-c)的 – outis 2010-11-29 12:49:48

回答

8

沒有錯。您正在詢問並獲取平臺上指針的大小。

通常不可能獲得指針指向的內存塊的大小,如果以後需要它,您必須自己記住它。

1

您無法打印您收到的內存塊的大小。 malloc可以分配您請求的所有內存或不分配的內存(並返回NULL)。

sizeof()運算符執行您的請求:它會告訴您指針的大小 - 指針本身在內存中佔用4個字節。

1

沒有錯,這是32位平臺上任何指針的大小。

2

在某些平臺上有「msize」函數,它返回由malloc/calloc/strdup分配的區域的大小。但這不是標準。