动态初始化的 2D 数组输出错误
Error in output of dynamically initialized 2D array
我正在做一个用 c++ 编写的学校项目。我正在尝试根据用户输入为生成分形(无关)的程序生成 rgb 颜色数组。
我发现需要使用指向 2D 数组的指针。指针具有全局作用域,因为它需要在多个函数中跨多个文件进行访问。
指针的声明没有问题。它是这样的:
在"全球.h"中
int **ptr;
int palette[10][3];
//all the statements like #ifndef GLOBAL_H_INCLUDED, etc are present
在主要.cpp
extern int **ptr;
extern int palette[10][3];
void gen_array();
int main()
{
//initialize values of palette
//palette is basically list of colors that the user selects for the
//desired blend of colors to appear on the screen
gen_array();
}
在 void gen_array() 中,在主.cpp
void gen_array()
{
int i=0, size=0, size_arr=0;
//size is a variable helpful in calculating "size_arr", which is the size of the dynamic array to be initialized
while(palette[i][0]!=256)
{ //calculates "size" }
for(int i=0; i<size-1; i++)
{
//to find "size_arr"
}
ptr= new int*[size_arr]();
for(int i = 0; i < size_arr; ++i)
{
ptr[i] = new int[3];
}
//the following piece of code enter's values column-wise into the array
int s=0;
for(int i=0; i<size-1; i++)
{
for(int k=0; k<3; k++)
{
int x=-1, a=0, b=0;
a= palette[i][k] - palette[i+1][k];
b= palette[i][k];
if(a<0)
{
a= -a;
x=1;
}
for(int j=0; j<=a; j++, s++)
{
ptr[i][k] = b;
//cout<<*(*(ptr+i)+k)<<' ';
b= b+ x;
}
b= b-x;
for(int j=a+1; j<=diff[i]; j++, s++)
{
ptr[i][k] = b;
cout<<ptr[i][k]<<' ';
}
cout<<endl;
}
}
//this output's the array that the pointer points to, on the screen
for(int i=0; i<size_arr; i++)
{
for(int j=0; j<3; j++)
{
cout<<ptr[i][j]<<' ';
}
cout<<endl;
}
}
问题是,数据在数组中正确生成和输入[在倒数第二个for循环中],但是当输出它[最后一个for循环]时,我得到了垃圾值。
从 cout 语句 [现在已注释] 获得的输入 [正确值] 的数据是这个 [按列打印],而给出的 O/P 是这个 [按行打印]。
如果需要知道,"size"(在本例中)=2, size_arr=256 和调色板 [0]={0, 0, 255} 和调色板 [1]={0,255,0}。
任何人都可以指出问题是什么,以及它是否与指针初始化有关吗?
即使没有读取所有程序代码,例如
for(int j=0; j<=a; j++, s++)
{
ptr[i][k] = b;
//cout<<*(*(ptr+i)+k)<<' ';
b= b+ x;
}
看起来显然不对劲。在每次迭代中,您都写入ptr[i][k]
并且循环不会更改ptr
、i
或k
。这意味着它将在循环期间继续写入相同的位置。
在你用来填充int** ptr的循环中查看你的int i。如果 size = 2,那么您永远不会将 ptr 推进到足以填充数组的程度。考虑像这样填充数组:
for(int i = 0; i < size_arr; ++i){//for every pixel in the main array
for(int k = 0; k < 3; ++k){//for every subpixel
int my_value = ...;//calculate the value for this entry
*(*(ptr+i)+k) = my_value;//assign
更好的是,使用包含 Uint8 r,g,b 的名为 pixel 的结构并分配为 pixel* ptr = new pixel[size] 并迭代像素并分配 ptr[i].r ptr[i].g ptr[i].b
相关文章:
- 输出错误,问题是找到总和5000位数字cpp
- 使用复制构造函数的程序输出错误
- 异或字符串加密/解密输出错误
- 在linux上使用g++输出错误,在windows上更正
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- ECDSA 密钥对生成输出错误
- fscanf() 输出错误的值
- 输入 1024 后十进制到二进制转换的输出错误?
- 输出错误命令的条件语句
- cuSparse (cusparseDcsrgemm) 中的矩阵乘法输出错误的结果
- 为什么 du -sh 输出错误大小的内存映射文件
- VS2017 的输出错误,但 mingw 有效
- 如何使FFMPEG C 代码不输出错误消息
- 乘以时输出错误.这是我编译器中的错误吗?C
- 输出错误:两个不同编译器上的不同输出:Prime Cryptarithm USACO
- 为什么输出错误崩溃
- C++输入/输出错误
- 尝试用 c++ 制作一个简单的加法器.编译成功,但输出错误
- 当我使用此合并排序代码运行时,输出错误
- 递归功能输出错误的值