Получение ошибки сегментации в фильтре cs50

#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, то мы будем в последней строке, но не в последнем столбце.