【问题标题】:error: variable-sized array may not be initialized错误:可变大小的数组可能未初始化
【发布时间】:2026-01-19 21:45:01
【问题描述】:

我的数组一直有这些错误。我应该如何返回一个未知大小的二维数组?我试图通过将 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 行,并且给出了一堆完全相同的错误。

【问题讨论】:

  • 你可以试试 char ** arraycreate(PBMImage,int x,int y)
  • char ManipArray[i][j] = img-&gt;data[(i*(j+1)+j)].blackWhite; --> 可能是ManipArray[i][j] = img-&gt;data[(i*(j+1)+j)].blackWhite;。还有j++;i++; 两次。坏的! return ManipArray; 超出范围。

标签: c multidimensional-array compiler-errors


【解决方案1】:

我应该如何返回一个未知大小的二维数组?

这个问题的典型解决方案是将堆上的内存分配给一个指针,隐式地将解除分配的责任传递给调用者。

例如:

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;
}

【讨论】:

  • 谢谢,这有效,但它给了我另一个错误,我正要发布另一个问题:P-MFunctionHolder.c: In function 'ArrayCreate': P-MFunctionHolder.c:190:26: error: subscripted value is neither array nor pointer nor vector
最近更新 更多