undefined-behavior - UndefinedBehaviorSanitizer:DEADLYSIGNAL
问题描述
我正在处理 CS50 中的问题集 4,这段代码编译得很好;但是,一旦我运行它,它就完全崩溃了,并给了我以下错误消息:
UndefinedBehaviorSanitizer:DEADLYSIGNAL
==13838==ERROR: UndefinedBehaviorSanitizer: SEGV on unknown address 0x7fae6282690a (pc 0x0000004292c7 bp 0x7fff28e4e760 sp 0x7fff28e49530 T13838)
==13838==The signal is caused by a READ memory access.
#0 0x4292c6 (/home/ubuntu/pset4/filter/filter+0x4292c6)
#1 0x4232b1 (/home/ubuntu/pset4/filter/filter+0x4232b1)
#2 0x7fae61719b96 (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
#3 0x402dd9 (/home/ubuntu/pset4/filter/filter+0x402dd9)
UndefinedBehaviorSanitizer can not provide additional info.
==13838==ABORTING
在我处理之前的过滤器期间,没有出现任何错误,一切正常,就像我实现这个新代码一样,它给了我这个错误。我尝试将 0 替换为 1,以便自动访问第一个像素,依此类推;但是它没有用,我认为它不正确;因此,我将其恢复为 0。我将不胜感激。非常感谢。
#include "helpers.h"
#include <math.h>
#include <stdlib.h>
// Blur image
void blur(int height, int width, RGBTRIPLE image[height][width])
{
int sumred;
int sumgreen;
int sumblue;
for (int i = 0; i < height; i++)
{
for (int n = 0; n < width / 2; n++)
{
if (i == 0 && n == 0)
{
sumred = ((image[i][n].rgbtRed + image[i - 1][n].rgbtRed + image[i][n + 1].rgbtRed + image[i - 1][n + 1].rgbtRed)/4);
sumgreen = ((image[i][n].rgbtGreen + image[i - 1][n].rgbtGreen + image[i][n + 1].rgbtGreen + image[i - 1][n + 1].rgbtGreen)/4);
sumblue = ((image[i][n].rgbtBlue + image[i - 1][n].rgbtBlue + image[i][n + 1].rgbtBlue + image[i - 1][n + 1].rgbtBlue)/4);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else if (i == (height - 1) && n == (width -1))
{
sumred = ((image[i][n].rgbtRed + image[i + 1][n].rgbtRed + image[i][n - 1].rgbtRed + image[i + 1][n - 1].rgbtRed)/4);
sumgreen = ((image[i][n].rgbtGreen + image[i - 1][n].rgbtGreen + image[i][n - 1].rgbtGreen + image[i - 1][n - 1].rgbtGreen)/4);
sumblue = ((image[i][n].rgbtBlue + image[i - 1][n].rgbtBlue + image[i][n - 1].rgbtBlue + image[i - 1][n - 1].rgbtBlue)/4);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else if (i == 0 && n == (width - 1))
{
sumred = ((image[i][n].rgbtRed + image[i - 1][n].rgbtRed + image[i][n - 1].rgbtRed + image[i - 1][n - 1].rgbtRed)/4);
sumgreen = ((image[i][n].rgbtGreen + image[i - 1][n].rgbtGreen + image[i][n - 1].rgbtGreen + image[i - 1][n - 1].rgbtGreen)/4);
sumblue = ((image[i][n].rgbtBlue + image[i - 1][n].rgbtBlue + image[i][n - 1].rgbtBlue + image[i - 1][n - 1].rgbtBlue)/4);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else if (i == (height - 1) && n == 0)
{
sumred = ((image[i][n].rgbtRed + image[i + 1][n].rgbtRed + image[i][n + 1].rgbtRed + image[i + 1][n + 1].rgbtRed)/4);
sumgreen = ((image[i][n].rgbtGreen + image[i + 1][n].rgbtGreen + image[i][n + 1].rgbtGreen + image[i + 1][n + 1].rgbtGreen)/4);
sumblue = ((image[i][n].rgbtBlue + image[i + 1][n].rgbtBlue + image[i][n + 1].rgbtBlue + image[i + 1][n + 1].rgbtBlue)/4);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else if (i == 0 && n != 0 && n != (width -1))
{
sumred = ((image[i][n].rgbtRed + image[i - 1][n].rgbtRed + image[i][n + 1].rgbtRed + image[i - 1][n + 1].rgbtRed + image[i - 1][n - 1].rgbtRed + image[i][n - 1].rgbtRed)/6);
sumgreen = ((image[i][n].rgbtGreen + image[i - 1][n].rgbtGreen + image[i][n + 1].rgbtGreen + image[i - 1][n + 1].rgbtGreen + image[i - 1][n - 1].rgbtGreen + image[i][n - 1].rgbtGreen)/6);
sumblue = ((image[i][n].rgbtBlue + image[i - 1][n].rgbtBlue + image[i][n + 1].rgbtBlue + image[i - 1][n + 1].rgbtBlue + image[i - 1][n - 1].rgbtBlue + image[i][n - 1].rgbtBlue)/6);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else if (i != 0 && i != (height - 1) && n == 0)
{
sumred = ((image[i][n].rgbtRed + image[i - 1][n].rgbtRed + image[i][n + 1].rgbtRed + image[i - 1][n + 1].rgbtRed + image[i + 1][n + 1].rgbtRed + image[i + 1][n].rgbtRed)/6);
sumgreen = ((image[i][n].rgbtGreen + image[i - 1][n].rgbtGreen + image[i][n + 1].rgbtGreen + image[i - 1][n + 1].rgbtGreen + image[i + 1][n + 1].rgbtGreen + image[i + 1][n].rgbtGreen)/6);
sumblue = ((image[i][n].rgbtBlue + image[i - 1][n].rgbtBlue + image[i][n + 1].rgbtBlue + image[i - 1][n + 1].rgbtBlue + image[i + 1][n + 1].rgbtBlue + image[i + 1][n].rgbtBlue)/6);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else if (i == (height - 1) && n != 0 && n != (width - 1))
{
sumred = ((image[i][n].rgbtRed + image[i + 1][n].rgbtRed + image[i][n + 1].rgbtRed + image[i + 1][n + 1].rgbtRed + image[i][n - 1].rgbtRed + image[i + 1][n - 1].rgbtRed)/6);
sumgreen = ((image[i][n].rgbtGreen + image[i + 1][n].rgbtGreen + image[i][n + 1].rgbtGreen + image[i + 1][n + 1].rgbtGreen + image[i][n - 1].rgbtGreen + image[i + 1][n - 1].rgbtGreen)/6);
sumblue = ((image[i][n].rgbtBlue + image[i + 1][n].rgbtBlue + image[i][n + 1].rgbtBlue + image[i + 1][n + 1].rgbtBlue + image[i][n - 1].rgbtBlue + image[i + 1][n - 1].rgbtBlue)/6);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else if (i != 0 && i != (height - 1) && n == (width - 1))
{
sumred = ((image[i][n].rgbtRed + image[i - 1][n].rgbtRed + image[i][n - 1].rgbtRed + image[i - 1][n - 1].rgbtRed + image[i + 1][n - 1].rgbtRed + image[i + 1][n].rgbtRed)/6);
sumgreen = ((image[i][n].rgbtGreen + image[i - 1][n].rgbtGreen + image[i][n - 1].rgbtGreen + image[i - 1][n - 1].rgbtGreen + image[i + 1][n - 1].rgbtGreen + image[i + 1][n].rgbtGreen)/6);
sumblue = ((image[i][n].rgbtBlue + image[i - 1][n].rgbtBlue + image[i][n - 1].rgbtBlue + image[i - 1][n - 1].rgbtBlue + image[i + 1][n - 1].rgbtBlue + image[i + 1][n].rgbtBlue)/6);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
else
{
sumred = ((image[i][n].rgbtRed + image[i - 1][n].rgbtRed + image[i][n - 1].rgbtRed + image[i - 1][n - 1].rgbtRed + image[i + 1][n - 1].rgbtRed + image[i + 1][n].rgbtRed + image[i + 1][n + 1].rgbtRed + image[i - 1][n + 1].rgbtRed + image[i][n + 1].rgbtRed)/9);
sumgreen = ((image[i][n].rgbtGreen + image[i - 1][n].rgbtGreen + image[i][n - 1].rgbtGreen + image[i - 1][n - 1].rgbtGreen + image[i + 1][n - 1].rgbtGreen + image[i + 1][n].rgbtGreen + image[i + 1][n + 1].rgbtGreen + image[i - 1][n + 1].rgbtGreen + image[i][n + 1].rgbtGreen)/9);
sumblue = ((image[i][n].rgbtBlue + image[i - 1][n].rgbtBlue + image[i][n - 1].rgbtBlue + image[i - 1][n - 1].rgbtBlue + image[i + 1][n - 1].rgbtBlue + image[i + 1][n].rgbtBlue + image[i + 1][n + 1].rgbtBlue + image[i - 1][n + 1].rgbtBlue + image[i][n + 1].rgbtBlue)/9);
image[i][n].rgbtRed = sumred;
image[i][n].rgbtGreen = sumgreen;
image[i][n].rgbtBlue = sumblue;
}
}
}
return;
}
解决方案
推荐阅读
- javascript - SVG foreignObject 在 Safari 上无法正常工作
- python - appJar 状态栏不会实时更新
- python - 在代码检查完每个选项后,是否可以让我的 else 语句出现?
- javascript - 我如何在角度/打字稿中传递回调
- c# - 如何保持 asp.net 传递到存储过程的字符串的一致性?
- java - JSON 响应中的重复字段
- c# - 提供一个期望 Action 作为回调的对象
- scala - Scala:如何将 ValidatedNel 的 HList 转换为 HList 的 ValidatedNel
- javascript - 将数组与字符串进行比较,并将在数组中找到的所有项目替换为字符串中的公共字符
- c# - 验证数据网格 C# 中的复选框