gpt4 book ai didi

c - 如何将函数中的一个参数作为 void 指针参数转换为整数

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:34 25 4
gpt4 key购买 nike

这个函数很有趣,我将 nums 结构作为参数传递。问题是我需要在函数内部将这个字段转换成一个整数。如何在不改变我在函数中传递结构的方式的情况下做到这一点?

这是我正在尝试做的:

struct node{
char *str;
struct node *next;
};

struct numbers{
struct node *head;
int *new_a;
};

void *fun(void *args);

int main(int argc , char *argv[])
{
int *new_a, num_a;
struct node *head=NULL;

struct numbers *args = (struct numbers *)malloc(sizeof(struct numbers));

num_a = returnNum();

pthread_t pthread;
new_a = malloc(1);
*new_a = num_a;
args->new_a=new_a;

if( pthread_create( &pthread , NULL , (void *) &fun , (void *) &args) < 0)
{
perror("could not create thread");
return 1;
}

}

void *fun(void *args){

//void *num_a = (int *) args->new_a;
//int num_a = *(int*)(args->new_a);
struct numbers *temp_str = (struct numbers *) (*args);
int num_a = (int) *(args->new_a);
...
}

此外,我如何为头节点进行转换?任何人都可以请教吗?

最佳答案

由于 struct numbers * 被传递给 fun,您需要将参数分配给这种类型的变量。然后就可以使用结构了。

void *fun(void *arg){
struct numbers *temp_str = arg; // no need to cast from void *
int num_a = temp_str->new_a;
...
}

填充结构的方式也存在问题:

    int *new_a, num_a;
...
new_a = malloc(1);
*new_a = num_a;
args->new_a=new_a;

您没有为 new_a 分配足够的空间。您只分配 1 个字节,但大多数系统上的 int 是 4 个字节。当您随后从此内存位置读取和写入时,您将读取/写入已分配内存的末尾。这会调用 undefined behavior在这种情况下表现为崩溃..

您可以通过分配适当的空间量来解决此问题:

new_a = malloc(sizeof(*new_a));

但是,您根本不需要为此字段使用动态内存分配。只需将 new_a 声明为 int 并直接写入:

struct numbers{
struct node *head;
int new_a;
};

...

args->new_a = returnNum();

您也不需要获取args 的地址。它是一个指针,所以直接将它传递给 pthread_create:

if( pthread_create( &pthread , NULL , fun , args) < 0)

关于c - 如何将函数中的一个参数作为 void 指针参数转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47931592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com