c - 错误:可变大小的对象可能未初始化。我不明白为什么?
问题描述
该算法旨在通过计算目标像素(包括像素本身)前后、上方和下方像素的颜色度平均值来模糊图像,形成一个 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]);
}
解决方案
问题来自以下声明:
float blur_Red_leftedge[i - 1] = ...;
这是i - 1
浮点数可变长度数组 (VLA) 的定义。该行的其余部分(...
部分)被视为初始化程序。并且 C 标准明确禁止 VLA 具有初始化程序。
代码不完整,因此很难说它应该如何修复。我想删除float
和声明一个赋值表达式可能是一个好的开始。
推荐阅读
- python - python中的消除矩阵(高斯)
- python - 从 txt.file 打印每年的平均值
- c# - UNITY - 没有脚本,而是空白记事本
- r - RSelenium 和 R-将 DIV 导出到表中
- intellij-idea - 如果生成的类不在同一目录中,Intellij Idea 将无法识别它们
- build - Azure DevOps 中的拉取请求中的表面编译警告
- coq - 在 Coq 中使两个任意变量相同
- python - 如何将(多变量)时间序列加载到神经网络/LSTM 中
- .net - .NET Core c# 项目 - 所有 nuget 包都位于哪里?
- python - 更新后如何在 Biopython 中创建没有 Bio.Alphabet 模块的 IUPAC dna 对象?