C 在线程内打印参数

C 在线程内打印参数,c,multithreading,C,Multithreading,当我打印它时,它打印内存位置,而不是值。我需要打印值 在主线程中,正确设置开始和结束值。我已经检查过了 总的来说,我把论点设置如下 void * consumer_child(void *arguments){ Range rng = *((Range *) arguments); //prinnting with the range to easily identify each thread printf("consumer_child[%d-%d] started\

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

在主线程中,正确设置开始和结束值。我已经检查过了

总的来说,我把论点设置如下

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;
致:

因为
rng
已经是一个指针,您希望传递的是它,而不是它的地址。在C语言中,您不需要将对象指针强制转换为
void*
,除非您有一个可变函数,该函数需要一个对象指针,并且您试图将它传递给另一种类型的对象指针。

您需要更改:

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

因为
rng
已经是一个指针,您希望传递的是它,而不是它的地址。在C语言中,您不需要将对象指针强制转换为
void*
,除非您有一个可变函数,该函数需要一个对象指针,并且您试图将它传递给另一种类型的对象指针。

您需要更改:

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

因为
rng
已经是一个指针,您希望传递的是它,而不是它的地址。在C语言中,您不需要将对象指针强制转换为
void*
,除非您有一个可变函数,该函数需要一个对象指针,并且您试图将它传递给另一种类型的对象指针。

您需要更改:

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


因为
rng
已经是一个指针,您希望传递的是它,而不是它的地址。在C语言中,您不需要将对象指针强制转换为
void*
,除非您有一个变量函数需要一个对象指针,并且您试图将另一种对象指针传递给它。

范围是什么?您是如何创建线程的?将
(void*)&rng
更改为
rng
@CoolGuy我添加了更多代码,请检查。范围是多少?您是如何创建线程的?将
(void*)&rng
更改为
rng
@CoolGuy我添加了更多代码,请检查。范围是多少?您是如何创建线程的?将
(void*)&rng
更改为
rng
@CoolGuy我添加了更多代码,请检查。范围是多少?您是如何创建线程的?将
(void*)&rng
更改为
rng
@CoolGuy我添加了更多代码,请检查。