C 错误:可变大小的对象可能未初始化。我不知道';我不明白为什么?
该算法旨在通过计算目标像素(包括像素本身)前后以及上方和下方的像素的平均颜色度来模糊图像,形成一个3×3框。 但我总是犯这样的错误有人能解释我为什么吗C 错误:可变大小的对象可能未初始化。我不知道';我不明白为什么?,c,image,blur,C,Image,Blur,该算法旨在通过计算目标像素(包括像素本身)前后以及上方和下方的像素的平均颜色度来模糊图像,形成一个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].rg
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]);
}
for(int i=1;i
问题来自以下声明:
float blur_Red_leftedge[i - 1] = ...;
这是i-1
float的可变长度数组(VLA)的定义。
行的其余部分(…
部分)被视为初始值设定项。
C标准明确禁止VLA具有初始值设定项
代码不完整,因此很难说应该如何修复。
我想删除
float
并将声明作为赋值表达式可能是一个好的开始。您是否试图声明两个名为blur\u Red\u leftedge
和blued\u leftedge
的float
数组?删除“float”。为什么?那是哪一个呢?我添加了(I-1),因为我认为如果你能看到循环从1开始,那么blur_Red_leftedge[0]是空的,这就是问题所在。我认为你把C数组和其他语言的dict/maps混淆了。声明时,C数组有一个静态大小,通过索引0访问到size-1。在类似Python的东西中,blur\u Red\u leftedge[i-1]
在blur\u Red\u leftedge
中创建一个新条目,但在C中,添加float
类型意味着创建一个大小相同的数组(在这种情况下,右边没有意义-您可以使用{1.0,1.1.2.0}
,但不能指定一个值)。在for
循环之外声明数组,然后正常访问它们(不要包括float
,否则您将声明一个同名的新数组)。因此,每次循环运行一个新循环时,我都会创建一个名为的新数组?