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 red
、unsigned char green
、unsigned 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
。
我的价值观在哪里改变?
提前感谢您的帮助!
【问题讨论】:
令人困惑的是,您的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++,一个数组的值在某个地方出乎意料地改变了,你能帮我找出哪里吗?的主要内容,如果未能解决你的问题,请参考以下文章