Двумерный массив в куче
float kek[2][6] = {
{Forms[x].x + ((rf * 2) + nx), Forms[x].x - ((rf * 2) + nx), Forms[x].x + st, Forms[x].x - st, Forms[x].x + st, Forms[x].x - st},
{Forms[x].y, Forms[x].y, Forms[x].y + (rf * 2), Forms[x].y + (rf * 2),Forms[x].y - (rf * 2), Forms[x].y - (rf * 2)}
};
как мне сделать этот массив в куче?
Ответы (3 шт):
Например так:
float** kek = new float* [2]{
new float[6]{ Forms[x].x + ((rf * 2) + nx),
Forms[x].x - ((rf * 2) + nx),
Forms[x].x + st, Forms[x].x - st,
Forms[x].x + st, Forms[x].x - st
},
new float[6] {Forms[x].y, Forms[x].y,
Forms[x].y + (rf * 2), Forms[x].y + (rf * 2),
Forms[x].y - (rf * 2), Forms[x].y - (rf * 2)}
};
Лучше в вопросе не показывать действия, не относящийся к вопросу. В частности к вопросу не относится все действия для получения значения элементов.
Такой себе способ, из за проблем с утечками памяти:
int** mass = new int*[2]; //массив указателей
mass[0] = new int[4]{00, 01, 02, 03}; //массив значений
mass[1] = new int[4]{10, 11, 12, 13};
delete mass[1];
delete mass[0];
delete mass;
Смысл в том, что мы сначала выделяем массив из указателей на переменную. В каждый элемент такого массива мы помещаем указатель на массив их переменных.
Какие минусы:
1) Выделяется больше памяти чем ожидается. В данном случае имеем 8 элементов типа int (пусть 4 байта) + 2 элемента типа int*(пусть 8 байт).
2) Очень сложный процесс удаления такого массива. Вообще рекомендуется в c++ уходить от прямой работы с памятью, т.к. такая работа подвержена ошибкам. Уже просто не рекомендуется тупо выделять массив в куче (new int[]), а мы здесь играем с указателями на указатель. Легко забыть удалить какой нибудь массив или удалить их в неправильном порядке:
//утечка памяти
delete mass;
//неопределенное поведение
delete mass;
delete mass[0];
//правильно
delete mass[0];
delete mass[1];
delete mass;
Если есть возможность, то, конечно, лучше использовать std::array< std::array<>> или std::vector< std::vector>.
Сложно найти это но(сам нашёл только у препода в документации написанной очень давно). Пример:
int n = 2;
float (*a)[3] = new float[n][3];
это указатель на массив, состоящий из массивов по 3 float'a. Заполнить его можно так:
a[0][0] = 1;
...
a[0][2] = 3;
...
...
...
a[1][3] = 5;
Удалить очень просто:
delete[] a;