Re: [問題] 如何動態的宣告一個2維矩陣

看板C_and_CPP作者 (meow)時間12年前 (2011/12/20 15:23), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《CS1DADA (CS1DADA)》之銘言: : 問題(Question): : 我有一個矩陣要宣告成全域變數 : 但是這個矩陣要讀檔後才能知道他的大小 : 請問要怎宣告? template <typename T> T **alloc_2D_array(int width, int height) { T **arr = (T **)calloc(height, sizeof(T *)); if (arr == NULL) exit(1); arr[0] = (T *)calloc(width*height, sizeof(T)); if (arr[0] == NULL) exit(1); for (int j = 1; j < height; ++j) arr[j] = arr[j - 1] + width; return arr; } template <typename T> void free_2D_array(T **arr) { free(arr[0]); free(arr); return; } int **graphic; //global int main() { graphic = alloc_2D_array<int>(1024, 768); ... ... ... ... free_2D_array(graphic); return 0; } 概念上大概就是這樣 用 malloc 或 new 去做也可以 主要要小心的關鍵點是 別把第二層 allocate memory 的動作放到迴圈裡面去 不然效能會有差 -- 琴劍六記 百萬字武俠長篇連載   http://gs.cathargraph.com 直接閱讀《琴劍六記》 http://gs.cathargraph.com/p/list.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.2.114 ※ 編輯: pnpncat 來自: 219.84.2.114 (12/20 15:46)

12/20 15:54, , 1F
不過我不是很懂你為什麼一定要將這東西作成全域變數
12/20 15:54, 1F

12/20 15:56, , 2F
事實上 反正都是傳址 你用區域變數也不會增加什麼成本
12/20 15:56, 2F

12/20 15:56, , 3F
還可以免除全域變數可能造成的一些麻煩
12/20 15:56, 3F
文章代碼(AID): #1Ey3VcMJ (C_and_CPP)
文章代碼(AID): #1Ey3VcMJ (C_and_CPP)