C 如何创建包含指向另一个未指定类型的结构的指针的结构?

C 如何创建包含指向另一个未指定类型的结构的指针的结构?,c,struct,casting,segmentation-fault,malloc,C,Struct,Casting,Segmentation Fault,Malloc,这是将包含另一个(变量)结构的结构: 我不知道该结构将是什么,因为我希望有一个可供嵌套的结构选择,然后根据需要转换为正确的类型。例如: typedef struct{ char * policy; int size; char * addr; } PS_call_struct; 我使用此函数初始化这些结构: threadHandle * createHandle(char * mem_addr, char * name, int option, void *

这是将包含另一个(变量)结构的结构:

我不知道该结构将是什么,因为我希望有一个可供嵌套的结构选择,然后根据需要转换为正确的类型。例如:

typedef struct{
    char *  policy;
    int     size;
    char *  addr;
} PS_call_struct;
我使用此函数初始化这些结构:

threadHandle * createHandle(char * mem_addr, char * name, int option, void * struct_pointer){
    threadHandle * new = malloc(sizeof(threadHandle));

    new->mem_addr = malloc(strlen(mem_addr)+1);
    strcpy(new->mem_addr,mem_addr);

    new->name = malloc(strlen(name)+1);
    strcpy(new->name,name);

    new->option = malloc(sizeof(int));
    new->option = option;

    new->struct_pointer = malloc(strlen(struct_pointer)+1);
    strcpy(new->struct_pointer,struct_pointer);

    return new;
}
还有这个:

PS_call_struct * createPS_call_struct(char *policy, int size, char *addr){
    PS_call_struct * new = malloc(sizeof(PS_call_struct));

    new->policy = malloc(strlen(policy)+1);
    strcpy(new->policy, policy);

    new->size = malloc(sizeof(int));
    new->size = size;

    new->addr = malloc(strlen(addr)+1);
    strcpy(new->addr, addr);        

    return new;
}
一旦我想使用嵌套结构,我就会强制转换它。我测试它如下:

PS_call_struct * ps1 = createPS_call_struct(&h, 999, &k);
Handle * write_handle = createHandle(SRV_SOCK_PATH, "thread_cream",777,ps1);
PS_call_struct * techk = (PS_call_struct* )(write_handle->struct_pointer);
现在我有一个问题,因为重铸后我无法访问任何值。我可以毫无问题地访问
ps1
的值,但
techk
的值大多为空。我不能像下面那样指定结构类型,因为我希望可以选择使用另一种结构类型

typedef struct {
    char * mem_addr;
    char * name;
    int option;
    int write_byte_size;
    PS_call_struct * struct_pointer;
} Handle;  

我不确定我所问的是否真的可行,或者我的方法是否不正确。谢谢您的帮助。

strlen函数需要指向以null结尾的字符串的指针。在
createHandle
中,
struct\u pointer
不是以null结尾的字符串,而是指向
PS\u call\u struct
的指针,因此这不会像您预期的那样工作

实际上,您只需将指针分配给
struct\u pointer

new->struct_pointer = struct_pointer;
此外,这也没有意义:

new->option = malloc(sizeof(int));
new->option = option;
因为字段
选项
不是指针,而只是一个
int
,所以不要调用
malloc

new->option = malloc(sizeof(int));
new->option = option;