首页 > 解决方案 > 错误:可变大小的对象可能未初始化。我不明白为什么?

问题描述

该算法旨在通过计算目标像素(包括像素本身)前后、上方和下方像素的颜色度平均值来模糊图像,形成一个 3×3 的框。但我不断收到此错误,有人可以解释一下为什么吗?

for (int i = 1; i < width - 1; i++)
{
    //error comes from this line 
    float blur_Red_leftedge[i - 1] = image[0][i].rgbtRed + image[1][i].rgbtRed + image[0][i - 1].rgbtRed + image[1][i - 1].rgbtRed + image[0][i + 1].rgbtRed + image[1][i + 1].rgbtRed;
    float blurRed_leftedge[i - 1] = (blur_Red_leftedge[i - 1] / 6);
    blurRed_leftedge[i - 1] = round(blurRed_leftedge[i - 1]);
    
    //and this line
    float blur_Green_leftedge[i] = image[0][i].rgbtGreen + image[1][i].rgbtGreen + image[0][i - 1].rgbtGreen + image[1][i - 1].rgbtGreen + image[0][i + 1].rgbtGreen + image[1][i + 1].rgbtGreen;
    float blurGreen_leftedge[i] = (blur_Green_leftedge[i] / 6);
    blurGreen_leftedge[i] = round(blurGreen_leftedge[i]);
    
    //and this
    float blur_Blue_leftedge[i] = image[0][i].rgbtBlue + image[1][i].rgbtBlue + image[0][i - 1].rgbtBlue + image[1][i - 1].rgbtBlue + image[0][i + 1].rgbtBlue + image[1][i + 1].rgbtBlue;
    float blurBlue_leftedge[i] = (blur_Blue_leftedge[i] / 6);
    blurBlue_leftedge[i] = round(blurBlue_leftedge[i]);
}

标签: cimageblur

解决方案


问题来自以下声明:

float blur_Red_leftedge[i - 1] = ...;

这是i - 1浮点数可变长度数组 (VLA) 的定义。该行的其余部分(...部分)被视为初始化程序。并且 C 标准明确禁止 VLA 具有初始化程序。

代码不完整,因此很难说它应该如何修复。我想删除float和声明一个赋值表达式可能是一个好的开始。


推荐阅读