Я пишу программу, которая выполняет некоторую фильтрацию изображения с учетом BMP-файла. Мне дана функция, которая выполняет фильтрацию для меня, но требует определенных входных данных, которые я получаю от stdin
, и моя программа должна поместить их в правильный формат. Одним из функциональных входов должен быть массив поплавков. Размер этого массива определяется шириной ввода массива квадратом пользователя. Таким образом, ввод 3 даст массив размером 9 (имитирующий матрицу. Для дальнейшего чтения о том, что я делаю, отметьте this Wikipedia link).Массив поплавков не получает правильного размера - C
Моя программа правильно принимает ширину фильтра. Он правильно вычисляет значение размера массива/матрицы. Однако, когда дело доходит до инициализации массива float для ввода значений, оно делает это неправильно.
Вот соответствующий код:
int filter_width;
filter_width = atoi(argv[3]);
// Initializing variables for the filter weights array
int filter_matrix_size;
filter_matrix_size = filter_width*filter_width;
float filter_weights[filter_matrix_size];
Для фильтра Ширина входа 3, я ДОЛЖЕН получать следующие значения для моих 3 переменных здесь:
фильтра Ширина: 3
Размер матрицы фильтра: 9
Размер filter_weights[]
= 9
Но когда я тестирую свою программу, я получаю размер filter_weights[]
равным 36. Я не знаю, откуда этот номер, и он уничтожает фильтрацию изображения. Я что-то упустил?
sizeof (filter_weights) возвращает размер filter_weights в BYTES - количество поплавков в filter_weights умножает размер в байтах каждого поплавка. Если я правильно понял, что число с плавающей запятой с одинарной точностью составляет четыре байта, это объясняет, откуда взялось 36. –
Как вы получаете размер? Если вы используете 'sizeof', это возвращает размер _in bytes_. –
«когда я тестирую свою программу». Не говори, покажи. –