结构/线程内的指针

时间:2010-12-23 16:28:08

标签: c multithreading pointers data-structures pthreads


我有这个警告“警告:从不兼容的指针类型分配 “在这一行:

data1->transformed_block[l] = &transformed_block[l];

-

void print_message_function ( void *ptr )  
{  
  dt *data;  
  data = (dt *) ptr;  
  printf("Dentro da thread Numero0: %ld\n", data->L_norm_NewBlock);  
  pthread_exit(0);  
}  

typedef struct data_thread  
{  
    long L_norm_NewBlock;  
    int Bsize_X;      
    int Bsize_Y;  
    int *transformed_block[MAX_LEVEL];  
    long L_norm_OrigBlock;      
} dt;  

void function()  
{  
  int *transformed_block[MAX_LEVEL];  
  pthread_t thread1;  
  dt *data1;  
  pthread_attr_t attr;  
  pthread_attr_init(&attr);

  //Fills structure  
  data1 = (dt *) malloc(sizeof(dt));    
  data1->transformed_block[l] = &transformed_block[l];

  data1->L_norm_NewBlock=0;  
  data1->Bsize_Y = Bsize_Y;  
  data1->Bsize_X = Bsize_X;  

  pthread_create(&thread1, &attr, (void *) &print_message_function, (void *) &data1);  
}

我想摆脱那个警告,我在线程中获得的值是错误的。例如data1-> L_norm_NewBlock = 0;在线程中给我一个不同的值(不应该是0)。

3 个答案:

答案 0 :(得分:1)

什么是transformed_block?假设它与结构中定义的变量相同,您试图将第l个元素的地址(指向int指针的指针)分配给data1的第l个元素 - > transformed_block(指向int的指针)

data1->transformed_block[l] = &transformed_block[l];
// int* = &(int*)

你不是想简单地分配吗?

data1->transformed_block[l] = transformed_block[l];

答案 1 :(得分:0)

线程内的值现在没问题。我删除了&在函数中

pthread_create(& thread1,& attr,(void *)& print_message_function,(void *)& data1);

pthread_create(& thread1,& attr,(void *)& print_message_function,(void *)data1);

但我仍然没有摆脱那个警告......

答案 2 :(得分:0)

你的结构中有一个int指针数组,并在你的函数中声明为局部变量,但是你从不指定它指向任何东西。

如果你试图在function()中有一个本地数组,你应该声明int transform_block [MAX_LEVEL],而不是int * transform_block [MAX_LEVEL]。这应该会使警告消失。

void function()
{
int transformed_block[MAX_LEVEL]; pthread_t thread1;
// * removed from above line
dt *data1;
...