我有这个警告“警告:从不兼容的指针类型分配
“在这一行:
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)。
答案 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;
...