我如何在C動態分配的數組的長度?
我想:
sizeof(ptr)
sizeof(ptr + 100)
,他們沒有工作。
我如何在C動態分配的數組的長度?
我想:
sizeof(ptr)
sizeof(ptr + 100)
,他們沒有工作。
你不能。您必須將長度作爲參數傳遞給您的函數。指針的大小是包含地址的變量的大小,這就是您找到4(32位地址空間)的原因。
在這裏你可以看到C的危險:一個ptr只是指向內存,並沒有辦法知道應該是什麼大小。你可以增加和增加,最終操作系統可能會抱怨,或者你的程序崩潰,或者損壞其他程序。你應該總是指定大小,並自己檢查邊界!
由於malloc的只是給後面的內存塊,你可以在塊告訴有多少元素的數組中添加額外的信息,這是一個辦法解決,如果你不能添加,它告訴數組的大小參數
eg
char* ptr = malloc(sizeof(double) * 10 + sizeof(char));
*ptr++ = 10;
return (double*)ptr;
假設你可以在PHP中讀取數組之前,我不熟悉的語言。
你只需要在分配中添加一個字節來存儲長度?如果分配是1000而不是10呢? – selbie 2011-02-26 11:41:28
在C,不強制轉換malloc的返回值()。請參閱http://stackoverflow.com/questions/953112/should-i-explicitly-cast-mallocs-return-value。 – unwind 2011-02-26 19:22:21