У меня есть упражнение, в котором я должен создать определенное количество pthreads для снятия шума с изображения, но у меня возникают проблемы с моими указателями. Каждый поток получает input_image, но затем все потоки должны быть способны записывать в тот же файл output_image. Вот те части, которые актуальны.Изменение содержания с помощью указателей
struct task{
int start_row, stop_row, window_size;
image_matrix input_image;
image_matrix * output_image; //holds the address of the original output_matrix
};
void* func(void* arg){
task* t_arg = (task*)arg;
image_matrix& input = t_arg->input_image;
//image_matrix& output = t_arg->output_image;
image_matrix * matrix_address= t_arg->output_image; //<-----
for(int y = start; y<=stop; y++){
for(int x=0;x<input.get_n_cols();x++){
float filtered_value = median_filter_pixel(input, y, x, window_size);
*matrix_address.set_pixel(y,x,filtered_value); //<------2
}
}
pthread_exit(NULL);
}
//This is how I set the output_image in main() but I'm pretty sure
//this is good. Filtered image is just
td[j].output_image = &filtered_image;
Это дает нижеприведенную ошибку, но я не понимаю, почему. Значение, на которое указывает matrix_address, имеет тип image_matrix, поэтому он должен иметь все атрибуты image_matrix. Я пробовал все, что имеет смысл для меня, но ничего не работает. Также, когда я забираю оператор разыменования из строки с пометкой 2, он дает ту же ошибку, которая также не имеет смысла для меня.
request for member ‘set_pixel’ in ‘output_address’, which is of pointer
type ‘image_matrix*’ (maybe you meant to use ‘->’ ?)
Pthreads так заранее 2011 ... – user4581301
Честно говоря, даже не заморачиваться с Pthreads. Вид ошибки, которую вы видите, является явным признаком того, что любая идея потока находится за пределами вашего уровня. Сожалею. – SergeyA
У меня есть сильное чувство, что ваш output_image будет поврежден –