Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 错误:可变大小的对象可能未初始化。我不知道';我不明白为什么?_C_Image_Blur - Fatal编程技术网

C 错误:可变大小的对象可能未初始化。我不知道';我不明白为什么?

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

该算法旨在通过计算目标像素(包括像素本身)前后以及上方和下方的像素的平均颜色度来模糊图像,形成一个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]);
}
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
,否则您将声明一个同名的新数组)。因此,每次循环运行一个新循环时,我都会创建一个名为的新数组?