3

アレイでこれらのエラーが発生し続けます。サイズが不明な 2 次元配列を返すにはどうすればよいですか? 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 行あり、まったく同じエラーが多数発生するため、コード全体を投稿しませんでした。

4

1 に答える 1

2

サイズが不明な 2 次元配列を返すにはどうすればよいですか?

この問題の一般的な解決策は、ヒープ上のメモリをポインターに割り当て、割り当て解除の責任を暗黙的に呼び出し元に渡すことです。

例えば:

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;
}
于 2013-07-21T05:21:49.143 に答える