0

可変サイズの 2 次元配列を作成し、その可変配列を渡し、異なる次元の新しい 2 次元配列を返すにはどうすればよいでしょうか? 私はこれに何時間も取り組んできましたが、解決策が見つかりません。PGM 画像のピクセル値の配列を作成できましたが、今は配列を「回転」しようとしていますが、コンパイラが可変サイズのオブジェクトを宣言できないため、これは非常に複雑になっています。答えてくれた人たちに。

これは、関数を呼び出すステートメントです。可変サイズの配列を作成できないため、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 を使用しています。

4

2 に答える 2