Re: [問題] 分配記憶體給2d array的問題
好像該跳出來面對一下..
※ 引述《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
04/10 12:13, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):