1) Я не очень хорошо понимаю структуры, и мне нужен кто-то, кто объяснит мне, как я могу передать входящие / исходящие изображения в мою структуру ptf_arguments, чтобы я мог передать ее в функцию pthreads.
Если вам нужна 1 структура на поток, передайте ее по адресу pthread_create
по адресу, используя параметр arg
. Как вы уже пытались: &(arguments[i])
. Вы, вероятно, хотели просто сделать arguments[i]
, так как это указатель. На самом деле вы передаете не данные, выделенные адресом, а адрес локального указателя, что неверно и неверно.
ВАЖНО: Никогда не передавайте потоку указатель на локальную переменную! Переменная должна быть распределена либо со статической продолжительностью хранения, либо с помощью динамического выделения.
Если вы «не очень хорошо понимаете структуры», вам, вероятно, следует изучить их и попрактиковаться в их использовании, прежде чем переходить к более сложным темам, таким как многопоточность. В общем, вы не можете программировать методом проб и ошибок, вам нужно знать, что делает каждая напечатанная строка. Там нет "рискнуть".
2) Нужно ли выделять память для структуры изображения?
Да. И это еще одна причина, почему ваш код не работает. ptf_arguments *arguments[num_threads];
- это просто массив указателей, память для фактических данных не выделяется.
3) Нужно ли выделять память для массива int внутри структуры изображения структуры ptf_arguments?
Да.
Также не забудьте free
всю память, когда закончите использовать его. Функция «resize», вероятно, не должна выделять ресурсы, если она не освобождает ранее использованные ресурсы.