[問題] 如何一次給定struct以及內部指標記憶體?

看板C_and_CPP作者 (羊咩咩)時間11年前 (2014/01/24 06:41), 編輯推噓4(409)
留言13則, 7人參與, 最新討論串1/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 比如說有一個 struct struct ggg { int len; void *data; }; 是否能在 malloc struct 的同時也 malloc data的大小1024 看起來像是 struct ggg *g = malloc (sizeof(struct ggg)+1024) 但沒辦法這樣做 請問是否能做呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.222.3

01/24 14:49, , 1F
zero length array (gcc extension)
01/24 14:49, 1F

01/24 14:51, , 2F
C99已經把zero-length array納入標準了
01/24 14:51, 2F

01/24 15:38, , 3F
謝謝 ^^ 沒用過還真不知道
01/24 15:38, 3F

01/24 16:41, , 4F
無法ㄧ次,只能做兩次 malloc
01/24 16:41, 4F

01/24 17:57, , 5F
C99 並不是 zero-length array
01/24 17:57, 5F

01/24 17:58, , 6F
標準寫法是這樣 struct ggg { int len; char data[]; }
01/24 17:58, 6F

01/24 17:59, , 7F
也就是不寫大小,這樣的array member只能放在最後面
01/24 17:59, 7F

01/24 19:29, , 8F
感謝樓上指正 XD
01/24 19:29, 8F

01/25 19:03, , 9F
有人知道為什麼char data[]才會成功,而char *data就不會呢
01/25 19:03, 9F

01/25 19:06, , 10F
宣告成 pointer 和 array 的差別是?
01/25 19:06, 10F

01/25 19:20, , 11F
array轉指標會取得該array開頭的位址,此例為最後面
01/25 19:20, 11F

01/25 19:20, , 12F
指標就指標,預設是垃圾值,除非另外初始化他不然沒用
01/25 19:20, 12F

01/26 10:17, , 13F
明確的給予malloc,不然你以後都不知道為何要這樣寫
01/26 10:17, 13F
文章代碼(AID): #1IuWi87b (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1IuWi87b (C_and_CPP)