2013-07-21 72 views
0

如何創建一個可變大小的二維數組,並傳遞該可變數組,並返回一個新的不同維數的二維數組?我一直在這個工作幾個小時,我找不到解決方案。我設法爲PGM圖像創建了一個像素值數組,但現在我試圖「旋轉」數組,但這變得非常複雜,因爲我的編譯器不會讓我聲明一個可變大小的對象。謝謝對那些回答的人非常感興趣。如何創建一個變量大小的數組,將變量2d數組傳遞給函數並返回另一個2d數組?

這是調用函數的語句。有人告訴我使用malloc,因爲你不能創建一個可變大小的數組。

char *SpunArray = malloc(image->x * image->y * sizeof(PGMPixel)); 
SpunArray = Rotate90Array(image->x, image->y, CreatedArray); 

這是函數:

//char * Rotate90Array(int x, int y, char *array[x][y]) 
char * Rotate90Array(int x, int y, char *array) 
{ 
    printf("\nLine 179"); 
    // These have to be swapped because the image is being rotated 
    char *RotatedArray = malloc(x * y * sizeof(char)); 
    printf("\nLine 182"); 
    int u = x - 1; 
    int v = y - 1; 
    int i = 0; 
    int j = 0; 
    printf("\nLine 187"); 
    char *ptr; 
    printf("\nLine 189"); 
    for (i = 0; i < x; i++) 
    { 
     printf("\nLine 192"); 
     *ptr = RotatedArray[i]; 
     printf("\nLine 194"); 
     for (j = 0; j < y; j++) 
     { 
      printf("\nLine 197"); 
//   *ptr = *(array[u-j][i]); 
      *(ptr+((j*x)+(u-i))) = *(array+((i*y)+j)); 
      printf("\nLine 200"); 
      ptr++; 
      printf("\nLine 202"); 
     } 
    } 
    printf("\nLine 205"); 
    return RotatedArray; 
} 

我使用MingGW GCC和Windows 8是否有幫助。

+0

,如果你這樣做是爲了學習的目的,然後它的好,但如果它在的地方修改即可工作在陣列中會更好的選擇我認爲。 –

+0

@GrijeshChauhan 這不需要這兩個數組具有相同的尺寸?由於新陣列是一個旋轉,它將是n * m,而原始是m * n。 – DavidRC

+0

對不起,我注意到你的評論後,你是正確的,它很難使用相同的數組。 –

回答

1

您有內存泄漏。爲什麼你創建兩個數組而不是一個?

這樣做:

char *SpunArray = malloc(image->x * image->y * sizeof(PGMPixel)); 
Rotate90Array(image->x, image->y, CreatedArray, SpunArray); 

void Rotate90Array(int width, int height, char *array, char *RotatedArray) 
{ 
    int i = 0; 
    int j = 0; 
    for (i = 0; i < width; i++) 
    { 
     for (j = 0; j < height; j++) 
     { 
      // check this line on correct 
      RotatedArray[i * height + j] = array[j * width + width - i - 1]; 
     } 
    } 
} 
+0

是的,這個工程。 – ford

0

我覺得這個代碼可以作爲工作的期望:

char * Rotate90Array(int x, int y, char *array) 
{ 
    printf("\nLine 179"); 
    // These have to be swapped because the image is being rotated 
    char *RotatedArray = malloc(x * y * sizeof(char)); 
    printf("\nLine 182"); 
    int u = x - 1; 
    int v = y - 1; 
    int i = 0; 
    int j = 0; 
    printf("Line 187\n"); 
    char *ptr; 
    printf("Line 189\n"); 
    ptr = RotatedArray;    //I add this line 
    for (i = 0; i < x; i++) 
    { 
     printf("Line 192\n"); 
     // *ptr = RotatedArray[i]; //I delete this line 
     printf("Line 194\n"); 
     for (j = 0; j < y; j++) 
     { 
      printf("Line 197\n"); 
//   *ptr = *(array[u-j][i]); 
      *(ptr+((j*x)+(u-i))) = *(array+((i*y)+j)); 
      printf("Line 200\n"); 
     // ptr++;    // I delete this line 
      printf("Line 202\n"); 
     } 
    } 
    printf("Line 205\n"); 
    return RotatedArray; 
} 
相關問題