在线程内打印参数

void * consumer_child(void *arguments){ Range rng = *((Range *) arguments); //prinnting with the range to easily identify each thread printf("consumer_child[%d-%d] started\n", rng.start, rng.end ); pthread_exit(0); } 

当我打印它时,它打印内存位置,而不是值。 我需要打印这个值。

在主线程中,正确设置起始值和结束值。 我检查了他们。

在主要我把论点设置如下

 Range *rng = malloc(sizeof(*rng)); rng->start = i * numbersPerChild; rng->end = (numbersPerChild * (i + 1)) -1 ; printf("Range for thread %d is %d to %d\n", i, rng->start, rng->end ); printf("test print %d\n",rng->start); pthread_create(&tid[i], NULL, consumer_child, (void *)&rng ); 

范围是一个结构

 typedef struct { int start; int end; } Range; 

你需要改变:

 pthread_create(&tid[i], NULL, consumer_child, (void *)&rng ); 

至:

 pthread_create(&tid[i], NULL, consumer_child, rng); 

因为rng已经是一个指针,你想传递它,而不是它的地址。 您不需要在C中将对象指针强制转换为void * ,除非您有一个可变参数函数,它需要一个并且您尝试将其传递给另一种对象指针。