Size: a a a

IT KPI C/C++ ХВ (не UB)

2020 December 09

AP

Alexander Pavlyuchuk in IT KPI C/C++ ХВ (не UB)
к примеру
источник

AP

Alexander Pavlyuchuk in IT KPI C/C++ ХВ (не UB)
а откуда там взяться отступам, если типы одинаковы внутри
источник

J

Jmik in IT KPI C/C++ ХВ (не UB)
Aleksey Belkevich
Если в итоге ты будешь обращаться к массиву через двойной указатель, там всё равно будет подразумеваться что он "разбросан" по памяти. Так что если у тебя там будет линейно выделенная память, всё закончиться печально
Хмм
Т.е прироста от линейного размещения я не получу

И даже за счет кеширования в процессоре?
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
Jmik
Хмм
Т.е прироста от линейного размещения я не получу

И даже за счет кеширования в процессоре?
Я про то что если у тебя в результате будет int** x, то при обращении к x[9][8] пойдёт попытка разыменовать указатель по индексу 9, а потом перейти от него на смещение 8
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
А если у тебя там линейная структура, то соответственно при попытке разыменовать указатель, скорее всего улетишь куда-то в татарстан
источник

J

Jmik in IT KPI C/C++ ХВ (не UB)
Aleksey Belkevich
Я про то что если у тебя в результате будет int** x, то при обращении к x[9][8] пойдёт попытка разыменовать указатель по индексу 9, а потом перейти от него на смещение 8
Хмм, но ведь если я создам
int mat[5][5] он будет компактно расположен на стеке?
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
Jmik
Хмм, но ведь если я создам
int mat[5][5] он будет компактно расположен на стеке?
Да, это исключение
Поэтому нельзя делать вот так:
int mat[5][5];
int** x = mat; // error
источник

J

Jmik in IT KPI C/C++ ХВ (не UB)
Aleksey Belkevich
Да, это исключение
Поэтому нельзя делать вот так:
int mat[5][5];
int** x = mat; // error
Ох йо......
источник

J

Jmik in IT KPI C/C++ ХВ (не UB)
А если мне нужен плотный массив
Ибо потом мне это дело на видяху через openGL передавать......
источник

AP

Alexander Pavlyuchuk in IT KPI C/C++ ХВ (не UB)
ну так одномерный ебаш
источник

AP

Alexander Pavlyuchuk in IT KPI C/C++ ХВ (не UB)
и с ним работай :D
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
В опенгл я работал только с буферами вершин, представлять их где-то в виде двухмерной матрицы не приходилось
источник

AP

Alexander Pavlyuchuk in IT KPI C/C++ ХВ (не UB)
Alexander Pavlyuchuk
ну так одномерный ебаш
кстати я ваще опенгл в глаза не видел, так шо хз))
источник

J

Jmik in IT KPI C/C++ ХВ (не UB)
Aleksey Belkevich
В опенгл я работал только с буферами вершин, представлять их где-то в виде двухмерной матрицы не приходилось
Ну в опенгл ты передаешь одномерный массив вершин где плотно упакованы
XYZXYZXYZ - это например 3 вершины
Но ведь в коде с этим будет удобней работать с
struct point
{ double x; double y; double z }

struct point arr[3] ;
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
Jmik
Ну в опенгл ты передаешь одномерный массив вершин где плотно упакованы
XYZXYZXYZ - это например 3 вершины
Но ведь в коде с этим будет удобней работать с
struct point
{ double x; double y; double z }

struct point arr[3] ;
Ну это линейное выделение, так и работал
Только заранее прописал pragma pack вокруг структуры
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
Обращение в виде arr[3][0] здесь излишне, так как количество столбцов невелико и константно
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
Т.е. у меня в коде везде прописано arr[3].x arr[3].y и т.д.
источник

AB

Aleksey Belkevich in IT KPI C/C++ ХВ (не UB)
Ну конечно через удобные прослойки
источник

J

Jmik in IT KPI C/C++ ХВ (не UB)
Я просто хочу сделать функцию
Возвращающую
Массив точек 2хмерного элипса
(Чтоб потом его независимо крутить)
Их кол-во передается в функцию извне
(Чем больше точек, тем меньше результат похож на сиськи лары крофт)

И у меня получается
double arr[n][2]
Где n - колво точек
источник

J

Jmik in IT KPI C/C++ ХВ (не UB)
Jmik
Я просто хочу сделать функцию
Возвращающую
Массив точек 2хмерного элипса
(Чтоб потом его независимо крутить)
Их кол-во передается в функцию извне
(Чем больше точек, тем меньше результат похож на сиськи лары крофт)

И у меня получается
double arr[n][2]
Где n - колво точек
Можно ли как-то указать тип, чтоб он плотно распологался и при этом не упасть в segfault ?
источник