1. 程式人生 > >一種C語言建立超大二維陣列的辦法

一種C語言建立超大二維陣列的辦法

最近需要寫一套JNI來紀錄整個螢幕的畫素資訊(9屏截圖),於是想建立一個二維陣列方便快捷地進行儲存,結果炸開了:

基本可以百分百肯定是棧空間不足,但我又不想增加棧空間,那怎麼辦呢?其實還是有辦法的。

首先二維陣列是什麼呢?其實就是兩部分組成,一個一維指標陣列,然後數組裡面的每個指標指向(儲存)了一個唯一對應的定長陣列的首地址而已。(同理,三維陣列,就是三部分組成,第一部分是指向一堆等長一維指標陣列的指標,第二部分是這些指標指向的一維指標陣列,第三部分就是陣列),如圖:

一維陣列:

二維陣列:

三維陣列:

 

好的,道理我們懂了,那麼怎麼做呢?既然一次建立會爆炸,那我們可以分步建立的啦:

1、第一步,以int二維陣列為例,以寬度(或高度)建立專門裝int陣列頭地址int*指標陣列

2、第二步,以寬度(或高度)遍歷剛剛的int*地址陣列,給每個地址陣列建立一個高度(或寬度)為大小的int陣列空間,並把空間頭地址給予int*地址陣列對應的位置。

效果如下,順利執行。