2011-02-26 56 views

回答

19

你不能。您必須將長度作爲參數傳遞給您的函數。指針的大小是包含地址的變量的大小,這就是您找到4(32位地址空間)的原因。

2

在這裏你可以看到C的危險:一個ptr只是指向內存,並沒有辦法知道應該是什麼大小。你可以增加和增加,最終操作系統可能會抱怨,或者你的程序崩潰,或者損壞其他程序。你應該總是指定大小,並自己檢查邊界!

5

由於malloc的只是給後面的內存塊,你可以在塊告訴有多少元素的數組中添加額外的信息,這是一個辦法解決,如果你不能添加,它告訴數組的大小參數

eg

char* ptr = malloc(sizeof(double) * 10 + sizeof(char)); 
*ptr++ = 10; 
return (double*)ptr; 

假設你可以在PHP中讀取數組之前,我不熟悉的語言。

+1

你只需要在分配中添加一個字節來存儲長度?如果分配是1000而不是10呢? – selbie 2011-02-26 11:41:28