c++,一个数组的值在某个地方出乎意料地改变了,你能帮我找出哪里吗?

Posted

技术标签:

【中文标题】c++,一个数组的值在某个地方出乎意料地改变了,你能帮我找出哪里吗?【英文标题】:c++, An array's values are unexpectedly changing somewhere, could you help me find out where? 【发布时间】:2014-02-11 02:40:07 【问题描述】:

我是 C++ 新手,我正在编写一个编写 BMP 文件的程序。文件每个像素的信息存储在数组Color *image;中 Color 是一个类,它接收三个int RGB 值并将它们分配给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";
        
    

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

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

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

我的价值观在哪里改变?

提前感谢您的帮助!

【问题讨论】:

令人困惑的是,您的 row 变量遍历列,而您的 column 变量遍历行...我希望看到 image[y * width + x],而不是相反。 您能分享一下这两个代码块是如何组合在一起的吗?你如何将image 传递给第二种方法? image 只是在头文件中声明为Color* image;,所以我可以从类中的任何方法直接访问它。 为什么要将每个颜色组件的地址转换为char* 我要写入的文件是二进制文件,所以我将(char*) 转换为字节。 【参考方案1】:

不知道为什么会出现错误。假设你收到的指针是正确的,你为什么不直接做下面的,这是处理二进制文件的标准方式。

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

【讨论】:

谢谢你教我这个! image 的值仍然是错误的。有什么想法为什么他们会改变? 你贴的代码没有任何问题,只是我们经常用相反的方式使用“行”和“列”。我猜你需要一些交互式调试来观察值是如何变化的。

以上是关于c++,一个数组的值在某个地方出乎意料地改变了,你能帮我找出哪里吗?的主要内容,如果未能解决你的问题,请参考以下文章

惯用地查找给定值在数组中出现的次数

c# sql select 单独取出某个字段的值

莫名其妙地改变了数组的值,原来是……

怎样求数组中元素重复的次数

C# 改变数组中某个指定元素的值

C# 改变数组中某个指定元素的值