#c #segmentation-fault #cs50
Вопрос:
В настоящее время я застрял на фильтре pset4 cs50 (менее удобном). Программа компилируется идеально. Я опробовал первые три части кода (оттенки серого, сепия и отражение), и их вывод был таким, как хотелось; однако всякий раз, когда я пробую размытие, я продолжаю сталкиваться с ошибкой seg. Не мог бы кто-нибудь, пожалуйста, помочь мне определить, в чем заключается ошибка(ы)?
void blur(int height, int width, RGBTRIPLE image[height][width])
{
for (int i = 0; i <height; i )
{
for (int j = 0; j < width; j )
{
int c = i 1;
int d = j 1;
int e = i 2;
int f = j 2;
float blurred_blue = 0;
float blurred_green = 0;
float blurred_red = 0;
int z = 0;
if (height - i == 1 amp;amp; width - j >= 2)
{
for (int a = i - 1; a < c; a )
{
for (int b = j - 1; b < f; b )
{
blurred_blue = blurred_blue image[a][b].rgbtBlue;
blurred_green = blurred_green image[a][b].rgbtGreen;
blurred_red = blurred_red image[a][b].rgbtRed;
z ;
}
}
}
else if (width - j == 1 amp;amp; height - i >= 2)
{
for(int a = i - 1; a < e; a )
{
for(int b = j - 1; b < d; b )
{
blurred_blue = blurred_blue image[a][b].rgbtBlue;
blurred_green = blurred_green image[a][b].rgbtGreen;
blurred_red = blurred_red image[a][b].rgbtRed;
z ;
}
}
}
else
{
for(int a = i - 1; a < e; a )
{
for(int b = j - 1; b < f; b )
{
blurred_blue = blurred_blue image[a][b].rgbtBlue;
blurred_green = blurred_green image[a][b].rgbtGreen;
blurred_red = blurred_red image[a][b].rgbtRed;
z ;
}
}
}
image[i][j].rgbtBlue = round (blurred_blue / z);
image[i][j].rgbtGreen = round (blurred_green / z);
image[i][j].rgbtRed = round (blurred_red / z);
}
}
return;
}
Комментарии:
1. Вероятно, вы попытаетесь прочитать
image[-1][-1]
то, что запрещено и может привести к ошибке сегментации. Это происходит в последнем цикле for.a
иb
назначены-1
туда. Вы хотите, чтобы они начали с0
этого ?2.
if (height - i == 1 amp;amp; width - j >= 2)
< Какие значения высоты (а также i и j) будут оценены как истинные ?3. Большое вам спасибо, Энис Арик. Я исправил эту ошибку, но, похоже, проблема все еще существует. Я продолжу работать над программой и посмотрю, смогу ли я в ней разобраться.
4. wildplasser, идея использования этого условия заключается в том, что если высота — i == 1 и ширина — j >= 2, то мы будем в последней строке, но не в последнем столбце.