可変サイズの 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 を使用しています。