Re: [問題] 分配記憶體給2d array的問題

看板C_and_CPP作者 (閉上眼的魚)時間13年前 (2012/04/09 23:33), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/3 (看更多)
好像該跳出來面對一下.. ※ 引述《csihcs (非天夜翔)》之銘言: : ※ 引述《Snr (水餃)》之銘言: : : 小弟是看一篇blog有關C語言的討論 : : http://edisonx.pixnet.net/blog/post/88369759 : : 有下列一些問題 : : 1. : : 其中有一段說 : : 事實上 C language 在表達 pointer 大小時,只有一種寫法:sizeof(void *)。但有時 : : 在教學的時候, : : int **a = (int**)malloc(sizeof(int*) * 20); : : 這種寫法反而讓大多人認為較為清楚,同時基於一些 pointer 加法問題等,有時反而不 : : 會強調一定要用 void** a 、sizeof(void*) 等用法。 : : 這段完全看不懂@@~ 在不討論包 function 之前提下,文章原意正如 c 大所提。 : 任何的 pointer 的大小都是固定的 : 表達式為 sizeof (void *) : 所以 : int **a = (int**)malloc(sizeof(int *) * 20); : 原始應寫為 : void **a = (void**)malloc(sizeof(void*) * 20); : 但為了清楚辨別,才以第一種寫法。 : : 2. 關於動態分配記憶體給2d array 恕刪。 : : 這邊感覺怪怪的 : : size_t w=2, h=3; : : // allocate : : int *p; //為什麼不是h*sizeof(int *) : : int **v = (int **)malloc(w*sizeof(int *) + w*h*sizeof(int)); : : p = (int *)(v+w); //為什麼不是p = (int *)(v+h); : : for(i=0; i<w; ++i) //為什麼不是i<h p+=w 我覺得這樣比較合理吧 : : v[i]=p, p+=h; : : /* release */ : : free(v); : 個人認為是他筆誤了, 這裡真的是我筆誤,這份寫成了 v[w][h], 內文已修正。 : 第一個是 v[h][w] : 第二、三個變成了 v[w][h]。 : 你下載她的 ArrayManagement.rar : 其中 new3.c 的寫法就是你所提的, : 故個人認定純粹是筆誤。

04/10 03:53,
04/10 03:53

04/10 03:55,
雖然你家機器極可能跟你講的一樣,但沒有規定指標要一樣大
04/10 03:55
謝謝指正,這點倒是我的誤解,以為所有的 pointer size 長得都一樣。 若實際上 pointer size 沒一樣大時, 我想這份 sample code / sub func 也不能用了, 到時碎片化問題只能由一維轉 2/3 維方式解決, 不然就是這份 function 真要包成 macro 傳 type 進去 <很差的解法..> 抑或 F 大不同意見可供參考? -- If there is no tomorrow, I want to see u last time. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161

04/10 12:13, , 1F
謝謝EdisonX大
04/10 12:13, 1F
文章代碼(AID): #1FWt7YXW (C_and_CPP)
文章代碼(AID): #1FWt7YXW (C_and_CPP)