2013-07-29 50 views
0

假設我有一個函數在下面。C-傳遞一個3d數組,分配和人口

void function createBands(boolean option) { 
    int i, j; 
    int ***bands = (int ***)malloc((SIZE + 1) * sizeof(int **)); 
    for (i = 0; i < SIZE; i++) { 
    bands[i] = (int **)malloc(HEIGHT * sizeof(int *)); 
    for (j = 0; j < HEIGHT; j++) 
     bands[i][j] = (int *)malloc(WIDTH * sizeof(int)); 
    } 
    iterator *it = 
     createIterator(params); // do not be confused it is a structure with 
           // methods andaeribute just like Iterator class in 
           // java . Methods are poniters to functions. 
    repare_array(bands[Size], it); 
} 
void prepare_array(int **band, iterator *it) { read_array(band, it); } 

read_array(int **band, iterator *it) { 
    for (int i = 0; i < Height; i++) 
    band[i] = (int *)it->next(); 
} 

// Now in Iterator.c I have the iterator structure with the methods etc I will 
// write just some line form iterator. 

void *next() { 
    byte *b = 
     a function that reads bytes form a file and returns byte * CORECTLY !!!; 
    return b == NULL ? NULL : bytetoT(b); 
    // this function make void form byte conversion but it doesnt work so I make 
    // only a cast in read_aray as you see. SUppose just return b wich is byte(i 
    // know in C isn't any byte but I redeclared all the types to be JAVA.) 
} 

的問題是我應該分配的頻段,因爲在這種情況下按功能分類的一維向量迴歸正常,因爲我看到在功能範圍值。但是當它返回到數組[我]我有一個未分配的3DVector。 我需要用數據形式b來接收band [size] [i] [j]。在b中,數據是好的,然後我把條帶歸爲空。 我到目前爲止所做的事情是,在調用read_array之前準備aray,然後分配** band,然後得到一些結果但我沒有信心。 對不起,混亂!每個評論對我都有好處。也許我所做的事情沒關係,我不知道! 我對C並不陌生,我只是長時間不使用指針。

+0

錯誤在許多層面上...您沒有3D數組,您有一個指針指針指針。另外,你究竟想要完成什麼? – 2013-07-29 12:00:28

+0

另外,你不應該拋出'malloc()'的返回。什麼是'sizeofint'? – Xaqq

+0

我有一張我想壓縮的3D圖像。我有一個函數,從圖像讀取1D數組(字節),然後我轉換int中的字節,我試圖感受一個表示圖像的數組。 –

回答

0

如果是2D指針(**),則必須將其指定爲二維數組的地址,如果它是一維數組,則必須將其指定爲一維數組的地址。

爲了您read_array功能

   read_array(int**array...) 
       { 
       for(i=0;i<HEIGHT(the same as in allocation);i++) 
        `enter code here`array[i] = function();//function return an 1D array 
       } 

確保()函數返回一維數組的地址。

+0

函數()具有de簽名:void * function()。並且我有數組[i] =(int *)function();我還沒有解決問題。我做了什麼我重新分配了read_array中的數組,但我不知道這是否正確,因爲我已經在第一個函數中分配了一次數組,然後再次在第二個函數中分配了數組。 –

+0

請發佈完整的代碼.... – Mahesh