[英]Whether a pointer to struct can directly assign value to struct's members?
//我教科書上的這個代碼塊是否有誤? //我試過但運行失敗,終端顯示分段錯誤。
typedef struct{
_I num;
_u32 p[];
}_BUF;
_BUF create_buf(_I size){
void *p = malloc(size + sizeof(_BUF)));
_BUF *pbuf; // a pointer to _BUF
pbuf->p = p; // pbuf->p directly points allocated memory.
pbuf->num = size;
return pbuf;
}
_BUF
類型的靈活數組成員p
不是指針。 該數組始終緊跟在num
成員之后(中間可能有固定數量的填充)。 無法分配給數組 object; 您不能使該數組在其他地方引用 memory。
malloc(size + sizeof(_BUF))
同時為兩者分配 memory。 所以這個 function 的正確實現就是
typedef struct{
_I num;
_u32 p[];
}_BUF;
_BUF *create_buf(_I size){
_BUF *pbuf = malloc(size + sizeof(_BUF)));
pbuf->num = size;
return pbuf;
}
不需要中介void *
; 即使malloc
返回void *
,您可以而且應該將返回值直接轉換為您實際需要的類型,並且不需要轉換。
而且,正如 Craig Estey 指出的那樣,按值返回_BUF
在這里沒有任何意義; 它需要是一個指針。 希望那只是一個錯字。
如果你在問題中輸入的代碼真的是從你的教科書中正確復制的,那么你的教科書就是在胡說八道,你可能應該得到更好的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.