c ++,数组的值在某处意外变化,你能帮我找出在哪里吗?

c++, An array's values are unexpectedly changing somewhere, could you help me find out where?

本文关键字:在哪里 变化 数组 在某处 意外      更新时间:2023-10-16

我是c++的新手,我正在编写一个编写BMP文件的程序。文件每个像素的信息都存储在数组Color *image;颜色是一个类,它接受RGB的三个int值,并将它们分配给unsigned char redunsigned char greenunsigned char blue

我用以下命令初始化Color *image;

    Color c(255,255,255);
    image = new Color[width*height];
    for(int row = 0; row < width; row++){
        for(int column = 0; column < height; column++){
            image[column*width + row] = c;
            out << (int) image[column*width + row].red << " " << (int) image[column*width + row].green << " " << (int) image[column*width + row].blue << "n";
        }
    }

out是写入文本文件的ofstream。它只是确认它正在将正确的值写入数组的该点。

当我在另一种方法中使用此代码时,会出现我的问题:

for(int row = 0; row < width; row++){
        for(int column = 0; column < height; column++){
            cout << (int) image[column*width + row].red << " " << (int) image[column*width + row].green << " " << (int) image[column*width + row].blue << "n";
            out.write((char*) &image[column*width + row].red,1);
            out.write((char*) &image[column*width + row].green,1);
            out.write((char*) &image[column*width + row].blue,1);
        }
    }

它试图将image的每个部分的值写入二进制文件。cout产生随机值,如"254 238 254"。我关闭了所有流,并且在其他任何地方都不使用image

我的价值观在哪里变化?

提前感谢任何帮助!

不知道为什么会出现错误。假设您收到的指针是正确的,为什么不执行以下操作,这是处理二进制文件的标准方法。

out.write(reinterpret_cast<char*>(image), sizeof(Color) * width * height);