2013-07-21 97 views
3

我一直有這些錯誤與我的數組。我應該如何返回一個未知大小的二維數組?我試圖通過將其轉換爲數組然後進行數組操作來操縱一個pbm圖像。這是我的代碼錯誤:可變大小的數組可能未初始化

typedef struct 
{ 
    unsigned char blackWhite; 
} PBMPixel; 

typedef struct 
{ 
    int x, y; 
    PBMPixel *data; 
} PBMImage; 

這是在我的頭文件中定義的,它沒有給我任何問題。後來,我有這樣的:

char * ArrayCreate(PBMImage *img, int x, int y) 
{ 
    char ManipArray[x][y]; 
    int i = 0; 
    int j= 0; 
    for(i=0; i < x; i++) 
    { 
     for (j=0; j < y; j++) 
     { 
      char ManipArray[i][j] = img->data[(i*(j+1)+j)].blackWhite; 
      j++; 
     } 
     i++; 
    } 
    return ManipArray; 
} 

這些都是我不斷收到後面的錯誤:

P-MFunctionHolder.c: In function 'ArrayCreate': 
P-MFunctionHolder.c:171:4: error: variable-sized object may not be initialized 
P-MFunctionHolder.c:176:2: warning: return from incompatible pointer type [enabled by default] 
P-MFunctionHolder.c:176:2: warning: function returns address of local variable [enabled by default] 

我使用的MinGW和Windows 8是否有幫助,但我懷疑這就是問題所在。我也沒有發佈整個代碼,因爲這是大約260行,並給出了一堆完全相同的錯誤。

+0

可以嘗試字符** arraycreate(PBMImage,INT的x,int y)對 –

+0

'炭ManipArray [i] [j] = img->數據[(I *(j +1)+ j)]。blackWhite;' - >也許'ManipArray [i] [j] = img-> data [(i *(j + 1)+ j)]。也是'j ++;'和'i ++;'兩次。壞! '返回ManipArray;'超出範圍。 – BLUEPIXY

回答

2

How am I supposed to return a 2d array of unknown size?

該問題的典型解決方案是將堆中的內存分配給指針,隱式地將釋放責任傳遞給調用者。

例如:

char * ArrayCreate(PBMImage *img, int x, int y) 
{ 
    char *const ManipArray = malloc(x * y * sizeof(char)); 
    int i = 0; 
    int j= 0; 
    for(i=0; i < x; i++) 
    { 
     for (j=0; j < y; j++) 
     { 
      ManipArray[i * y + j] = img->data[(i*(j+1)+j)].blackWhite; 
      j++; 
     } 
     i++; 
    } 
    return ManipArray; 
} 
+0

謝謝,這個工作,但它給我一個錯誤我正要張貼另一個問題爲: 'P-MFunctionHolder.c:在函數 'ArrayCreate': P-MFunctionHolder.c:190:26:錯誤:下標值既不是數組也不是指針也不是矢量 – DavidRC