[問題] 分配記憶體給2d array的問題
小弟是看一篇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*) 等用法。
這段完全看不懂@@~
2. 關於動態分配記憶體給2d array
//v[h][w]
//這段程式碼沒問題
/* allocate */
int *trunk = (int*)malloc(sizeof(int)*h*w);
int **v = (int **)malloc(sizeof(int*)*h);
for(i=0; i<h; ++i)
v[i] = trunk, trunk+=w;
/* set value */
memset(v[0], 0, sizeof(int)*w*h);
/* release */
free(*v);
free(v);
另一種作法相似,其作法是把額外的 pointer 也塞到 heap 裡去,使其 malloc 次數少
一次。
這邊感覺怪怪的
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);
還是說我弄錯作者的意思了
謝謝各位大大
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 223.140.5.253
※ 編輯: Snr 來自: 223.140.5.253 (04/10 01:26)
→
04/10 03:52, , 1F
04/10 03:52, 1F
→
04/10 03:58, , 2F
04/10 03:58, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):