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

看板C_and_CPP作者 (水餃)時間13年前 (2012/04/09 17:17), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/3 (看更多)
小弟是看一篇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
文章代碼(AID): #1FWncKf6 (C_and_CPP)
文章代碼(AID): #1FWncKf6 (C_and_CPP)