Я работаю над школьным проектом, написанным на C++. Я пытаюсь создать массив цветов rgb на основе пользовательского ввода, для программы, которая генерирует фракталы (нерелевантные).Ошибка в выходе динамически инициализированного 2D-массива
Я нашел необходимость использовать указатель на 2D-массив. Указатель имеет глобальную область видимости, потому что к нему нужно обращаться через несколько файлов, используя несколько функций.
Нет никаких проблем с объявлением указателя. Это, как, например:
в "global.h"
int **ptr;
int palette[10][3];
//all the statements like #ifndef GLOBAL_H_INCLUDED, etc are present
в main.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();
}
в ничтожной gen_array(), в main.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 loop] Я получаю ненужные значения.
Данные, введенные [правильные значения], как полученные из утверждений COUT [которые в настоящее время прокомментированных] является this [напечатаны по столбцам], тогда как O/P выдается в this [напечатаны построчно].
Если требуется знать «размер» (в данном случае) = 2, size_arr = 256 и палитру [0] = {0, 0, 255} и палитру [1] = {0,255,0} ,
Может кто-нибудь указать, в чем проблема, и связано ли это с инициализацией указателя?
Опубликованный код не компилируется. Пожалуйста, напишите [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). –
'while (palette [i] [0]! = 256)' '' i' неинициализирован. – PaulMcKenzie
@PaulMcKenzie -it сделано в int main() –