c - 结构/线程内的指针

标签 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 )。

最佳答案

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

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

你不是想简单地 SCSS 吗?

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

关于c - 结构/线程内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520584/

相关文章:

c - 如何在 chroot jail 中执行 linux 命令

iphone - 当应用程序返回前台时,子线程随机被杀死

c - 括号 [] 运算符是否只能使用一次?

使用 Semaphore 运行时出现 java.util.NoSuchElementException

c - 在函数中交换两个数组的指针

c - 删除前未知删除节点的双向链表

c++ - (int*) 在这个程序中有什么意义?

c - fork - 我可以退出 parent 吗?

c++ - LNK2019 : unresolved external symbol error in OPNET 14. 5A

python - pyHook KeyLogger 线程未完成