Заменить malloc на массив - PullRequest
       28

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

0 голосов
/ 15 октября 2018

У меня есть программа обработки изображений (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]

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

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

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

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

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

или

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

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

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

0 голосов
/ 15 октября 2018

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

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