powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно динамически создать масив GLubyte mas[100][100][4]?
8 сообщений из 8, страница 1 из 1
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33162409
dinam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно динамически создать масив GLubyte mas[100][100][4]?

код:

GLubyte ***CVET_PIXSEL;
int p_CHIRINA=100, p_VISOTA=100, p_CVET=4;
int i,j;
scanf("%d %d %d",&p_CHIRINA,&p_VISOTA,&p_CVET);
CVET_PIXSEL=(GLubyte ***)calloc(p_CHIRINA,sizeof(GLubyte **));
for (i=0; i<=p_CHIRINA; i++)
{
CVET_PIXSEL =(GLubyte **)calloc(p_VISOTA,sizeof(GLubyte *));
for (j=0; j<=p_VISOTA; j++) CVET_PIXSEL[j]=(GLubyte *)calloc(p_CVET,sizeof(GLubyte));
}

работает некорректно с функцией opengl - "glTexSubImage2D".
Статически созданый масив GLubyte mas[100][100][4] работает прекрасно.
Тут проблема в размерности динамически созданного масива, или функция "glTexSubImage2D" не работает с динамически созданными масивами.
Если кто знает - ответьте.
...
Рейтинг: 0 / 0
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33162424
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, тут проблема с неумением считать звезды. И непониманием что такое массив вообще.
Код: plaintext
1.
2.
3.
4.
GLubyte *CVET_PIXEL;
CVET_PIXEL = (GLubyte*)malloc(p_CHIRINA * p_VISOTA * p_CVET * sizeof(GLubyte));

CVET_PIXEL[x*p_CHIRINA*p_VISOTA + y*p_VISOTA + z] = RED;
Никогда не называй переменные по русски - через полгода сам не сможешь их прочитать.
...
Рейтинг: 0 / 0
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33172358
_Alexei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или, если еще больше на С++, то вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
template <typename C> C*const*const*const Alloc3DArray (const int sx,const int sy,const int sz)
{
	typedef C** PPVAL;
	typedef C*  PVAL;
	C** pTemp;
	PPVAL *pPPVAL = new PPVAL[sx];//C** *pppVal = new C**[sx];
	for (int i =  0 ;i<sx;++i)
	{
		
		pPPVAL[i]= new PVAL[sy];
		

		for (int j =  0 ;j<sy;++j)
		{
			pPPVAL[i][j] = new C[sz];
		
		}

	}
	return pPPVAL;

}
int _tmain()
{
	
	char*const*const*const pchar  = Alloc3DArray<char>( 5 , 5 , 5 );
pchar[ 1 ][ 1 ][ 1 ] = 1 ; 
	Dealloc3DArray(C*const*const*const pppC, int sX,int sY, int sZ)
	{
/*Сами пишите*/ 
	}
	
Или ссуть такая, в деталях(например, порядке выделения памяти, я мог перепутать чего-нибудь, а думать - лень, потому, что выпил)

А еще я бы сделал свой класс
Или шаблонный класс
...
Рейтинг: 0 / 0
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33172379
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_AlexeiИли, если еще больше на С++, то вот так:
....
Или ссуть такая, в деталях(например, порядке выделения памяти, я мог перепутать чего-нибудь, а думать - лень, потому, что выпил)
А думать никогда не вредно.
Человеку явно нужен массив для работы с OpenGL. А оно, как и большинство интерфейсов, работает с линейными массивами а не с ветвистой структурой.
...
Рейтинг: 0 / 0
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33172588
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует единая формула равертывания многомерного
вектора в одномерный. Проблема для автора топика
может быть в том, насколько удобно обращатся
к многомерному вектору через cube_vector::get(i,j,k....).
Возможно постановка задачи более тривиальна и не потребует
такого подхода.

ИМХО.
...
Рейтинг: 0 / 0
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33172589
dwl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dwl
Гость
Лучше имхо написать враппер на одномерном массиве (физически, то что в памяти будет лежать - это будет тоже самое), с перекрытыми operator[].
...
Рейтинг: 0 / 0
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33173037
_Alexei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl _AlexeiИли, если еще больше на С++, то вот так:
....
Или ссуть такая, в деталях(например, порядке выделения памяти, я мог перепутать чего-нибудь, а думать - лень, потому, что выпил)
А думать никогда не вредно.
Человеку явно нужен массив для работы с OpenGL. А оно, как и большинство интерфейсов, работает с линейными массивами а не с ветвистой структурой.
Читать тоже полезно уметь:)
Прочтите вопрос еще раз
Надо массив
GLubyte***
просили обращение
GLubyte[x][y][z]
у вас же
GLubyte*
и обращение GLubyte(x+y+z)

разница есть?

"Ты минералочки хотел, так я тебе печенья принес"
...
Рейтинг: 0 / 0
Как правильно динамически создать масив GLubyte mas[100][100][4]?
    #33173111
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Alexei
Читать тоже полезно уметь:)
Прочтите вопрос еще раз
Надо массив
GLubyte***
просили обращение
GLubyte[x][y][z]
у вас же
GLubyte*
и обращение GLubyte(x+y+z)
Сам читать не умеешь. GLubyte*** несовместим с GLubyte[100][100][4], исходя из этого автору GLubyte*** не нужен.
Чтобы были тройные скобочки нужен operator[], который возвращает тип к которому применим operator[], который в свою очередь возвращает тип к которому тоже применим operator[]. типа

Код: C++
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
class Array3D
{
  GLubyte *const _rawData;
public:
  ...
  class Array2D
  {
    class Array1D
    {
      ...
      GLubyte& operator[](int index)
      {
       ...
      }
    }
    ...
    Array1D& operator[](int index)
    {
     ...
    }
  }
  ...
  Array2D& operator[](int index)
  {
   ...
  }
};
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно динамически создать масив GLubyte mas[100][100][4]?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]