Передача нескольких аргументов в поток из структуры - PullRequest
0 голосов
/ 22 сентября 2011

У меня проблемы с передачей аргументов, используется структура, содержащая другую структуру

Я знаю, что что-то не так с тем, как я использую структуры, но я просто не вижу, где ...

Спасибо!

это моя структура

typedef struct {
IMAGE *imagenfte;
IMAGE *imagendst;
}thread_data;

//thread_data *data = (thread_data *) malloc(sizeof(thread_data));

это другая структура

 typedef struct {
    HEADER header;
    INFOHEADER infoheader;
    PIXEL *pixel;
    } IMAGE;

IMAGE imagenfte,imagendst;

это моя функция потока

void *processBMP2(void *argumentos) 
{
thread_data *my_data;
my_data =  (thread_data *) (argumentos);
IMAGE *imagefte, *imagedst;
imagefte =  my_data->imagenfte;
imagedst = my_data->imagendst;
free(my_data);
int i,j;
int count=0;
PIXEL *pfte,*pdst;
PIXEL *v0,*v1,*v2,*v3,*v4,*v5,*v6,*v7;
int imageRows,imageCols;
memcpy(imagedst,imagefte,sizeof(IMAGE)-sizeof(PIXEL *));
imageRows = imagefte->infoheader.rows;
imageCols = imagefte->infoheader.cols;
imagedst->pixel=(PIXEL *)malloc(sizeof(PIXEL)*imageRows*imageCols);
...

и так я создаю поток и передаю аргументы де

     pthread_t hilo;

thread_data *my_data = (thread_data *) malloc(sizeof(thread_data));

my_data->imagenfte = &imagenfte;
my_data->imagendst = &imagendst;

pthread_create(&hilo,NULL, processBMP2, my_data);

//processBMP(&imagenfte,&imagendst);

1 Ответ

1 голос
/ 22 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...