«header» — это объект структуры, и вы можете считать, что header.img имеет значение 496. И структура заголовка имеет 3 целочисленных элемента, поэтому значение равно 12 байтам. (Учитывая 4 байта в int)
double** MatrixBuffers = new double* [header.img];
MatrixBuffers[0] = new double[header.img* 12];
for (unsigned int i=1; i<header.img; ++i) {
MatrixBuffers[i] = MatrixBuffers[0] + i * 12;
}
globaldata.adv_MatrixBuffers = MatrixBuffers;
Я понимаю, что MatrixBuffers — это указатель на 496 дублей. Но я не понимаю, что происходит во второй строке.
MatrixBuffers[0] = new double[header.img* 12];
1. Означает ли это, что MatrixBuffers [0] является указателем на 496 * 12 double?
2. Что происходит в цикле for?
3. Позже в коде MatrixBuffer [0] передается функции. Означает ли это, что я передаю указатель, являющийся базовым адресом, в MatrixBuffers [0]?
Для двойного указателя вы должны выделить память как для первого, так и для второго измерения.
Для второго уровня вместо выделения памяти для каждого измерения он выделяет память одним выстрелом
MatrixBuffers[0] = new double[header.img* 12];
Внутри цикла for они перемещают адрес и присваивают его каждому индексу.
Вместо этого он также может сделать это внутри цикла for и прокомментировать строку над циклом for.
MatrixBuffers[i] = new double[header.img];
Других решений пока нет …