cs50反射代码失败,值不在正确位置

dz6r00yl  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(94)

我无法找到一个方法来修复这两个错误,尽管当我自己测试时,pic反映正确。这就是错误

testing with sample 1x3 image
first row: (255, 0, 0), (0, 255, 0), (0, 0, 255)
running ./testing 2 1...
checking for output "0 0 255\n0 255 0\n255 0 0\n"...

预期输出:

0 0 255
0 255 0
255 0 0

实际输出:

0 0 0
0 0 255
0 255 0

我注意到,第一行中有一个来自第二行的值,第二行中有一个来自第三行的值。这是代码:

void reflect(int height, int width, RGBTRIPLE image[height][width])
{
    //this is where the reflected image gonna be
    RGBTRIPLE reflected[height][width];
    for (int h = 0 ; h < height ; h++)
    {
        for (int w = 0 ; w < width ; w++)
        {
            reflected[h][w] = image[h][width - w];
        }
    }
    //copying from the reflected to the image
    for (int h = 0 ; h < height ; h++)
    {
        for (int w = 0 ; w < width ; w++)
        {
           image[h][w] = reflected[h][w];
        }
    }
    return;
}

问题解决了,但现在我在3x3图像中遇到另一个问题,其中每列的第一行为零

预期输出:

255 0 0
255 0 0
255 0 0
0 255 0
0 255 0
0 255 0
0 0 255
0 0 255
0 0 255

实际输出:

0 0 0
255 0 0
255 0 0
0 0 0
0 255 0
0 255 0
0 0 0
0 0 255
0 0 255

我试着用不同的方法写代码,但我最终还是遇到了同样的bug。

83qze16e

83qze16e1#

您必须始终检查您的范围:image[r][c]假设0 <= r < height0 <= c < width
现在考虑你的image[h][width-w] .什么是范围width-w?当w = 0 => width-w = width .超出范围(和UB).
你只需要用image[h][width-1 - w]修复它。

相关问题