【发布时间】:2011-09-22 01:17:47
【问题描述】:
我在使用包含另一个结构的结构传递参数时遇到问题
我知道我使用这些结构的方式有问题,但我就是看不到在哪里......
谢谢!
这是我的结构
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);
【问题讨论】:
-
这两个
IMAGE对象是如何分配的?如果它们在堆栈而不是堆上,那么这可能是您的问题。确保它们在线程的生命周期内有效。 -
@Evan:好点,我错过了这种可能性......
标签: c multithreading struct arguments