Заменить malloc на массив

У меня есть программа обработки изображений (canny-edge-Detection), вот одна часть кода:

short int **magnitude;
int rows=320, cols=240;

//Allocate memory to store the image, warning if not successful
if((*magnitude = (short *) calloc(rows*cols, sizeof(short))) == NULL){
//some warning
}

Я хотел бы использовать массив, чтобы избежать динамического выделения памяти, так как это невозможно в системе, на которой я собираюсь запустить код. Каков размер массива в этом случае? Я предположил

short int magnitude_arr[76800]

Однако выходное изображение было разрезано пополам.

0

Решение

Ваша декларация даст вам массив статического размера с правильным размером.
Если ваша программа больше не работает, ошибка в другом месте.

Если вы собираетесь использовать статический размер, вы можете подумать об использовании

std::array<short, 76800u> magnitude;

или же

std::vector<short> magnitude(rows * cols);

если вместо этого строки и столбцы могут измениться, чтобы динамический размер среды выполнения.

Если вам нужен указатель на сохраненные данные, оба класса имеют data() функции-члены.

1

Другие решения

Это должно делать красиво.

const int rows=320;
const int cols=240;
short int magnitud_arr[rows * cols];
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector