
大大您好,
請問那三維的指標矩陣3X3X3我這樣寫也OK吧?
char ***temp = new char **[3];
for(int i=0;i<3;i++)
temp[i] = new char *[3];
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
temp[i][j] = new char [3];
C++我幾乎沒用過,所以如果我解釋錯誤,請別見怪!
而上面的程式,temp[]只有3塊空間,應該沒辦法存取temp[][],所以要使用多維陣列,直接new一個多維陣列即可
.
一個陣列,基本上是指一整塊連續的記憶體,假設宣告ARRAY[2][3],我們在ARRAY[1][1]中存取,實際上來說,是以ARRAY為區段,存取索引值第2x2=4個單元裡面的東西,為什麼會這樣呢?因為以目前一般的計算機硬體結構來說,只有一維陣列,無論是DRAM或硬碟都是一維陣列,陣列的宣告只是告訴compiler寫程式的人要怎麼看待這塊記憶體,是為了讓寫程式的人管理更方便。
.
new與malloc是屬於執行期間動態配置,在embedded system上使用要特別小心,compiler內有一個選項叫做heap memory,就是設定memory allocation記憶體大小,當我們使用new或malloc得到的pointer就是從這塊記憶體刮出來的,設大了浪費,小了有爆掉的危險,不使用也可以關閉。
.
因為目前來說embedded system記憶體比較不足,記憶體管理也沒那麼聰明,且動態分配會造成記憶體斷離的問題,是有配置失敗的可能發生,一般來說embedded system是有可能放置在不容易取得的地方,例如某圍牆頂端,假設此時機器某個task死掉,watch dog機制也不夠完整,那要reset就不是那麼容易了。
.
不過有時設計出某些api一定要有open,close等等的動作,就一定會使用到動態配置,所以也不用對記憶體動態配置視若洪水猛獸,該考慮的都考慮到就好了!
寫的很清楚
如果能有完整的程式就更好了